Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

/magnus/back_end/SMApps/include/IsAbelianProblem.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: IsAbelianProblem.h,v 1.9 1998/08/03 20:24:12 bormotov Exp $
00003  */
00004  
00005 // Copyright (C) 1995 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 //
00008 // Contents: Declaration of classes IsAbelianChecker, IsAbelianProblem
00009 //
00010 // Principal Author: Dmitry Bormotov
00011 //
00012 // Status: in progress
00013 //
00014 // Revision History:
00015 //
00016 
00017 
00018 #ifndef _IsAbelianProblem_h_
00019 #define _IsAbelianProblem_h_
00020 
00021 
00022 #include "Supervisor.h"
00023 #include "SMFPGroup.h"
00024 #include "NilpotentQuotients.h"
00025 #include "GeneticProblems.h"
00026 
00027 
00028 // ------------------------- IsAbelianChecker ------------------------------ //
00029 
00030 
00031 class IsAbelianChecker
00032 {
00033 public:
00034 
00035   IsAbelianChecker( class SMFPGroup& );
00036 
00037   Trichotomy isAbelian( );
00038 
00039   Chars getExplanation( ) { return explanation; }
00040 
00041   Chars commutator( VectorOf<int> components );
00042 
00043   bool haveDetails ( ) const;
00044 
00045   Chars getDetailsFileName( ) const;
00046 
00047 private:
00048 
00049   // Data members
00050 
00051   FPGroup G;
00052 
00053   class GIC& gic;
00054 
00055   class GCM& gcm;
00056 
00057 
00058   // Housekeeping members:
00059 
00060   bool triedAbelianization;
00061 
00062   bool triedOneRelator;
00063 
00064   Chars explanation;
00065 
00066   DetailedReport abelianDetails;
00067 };
00068 
00069 
00070 // --------------------------- IsAbelianProblem ---------------------------- //
00071 
00072 
00073 class IsAbelianProblem : public Supervisor
00074 {
00075 
00076 public:
00077 
00078   /////////////////////////////////////////////////////////////////////////
00079   //                                                                     //
00080   // Constructors:                                                       //
00081   //                                                                     //
00082   /////////////////////////////////////////////////////////////////////////
00083 
00084   IsAbelianProblem( class SMFPGroup& );
00085 
00086 
00087   /////////////////////////////////////////////////////////////////////////
00088   //                                                                     //
00089   // Accessors:                                                          //
00090   //                                                                     //
00091   /////////////////////////////////////////////////////////////////////////
00092 
00093   /////////////////////////////////////////////////////////////////////////
00094   //                                                                     //
00095   // Front End Interfacing:                                              //
00096   //                                                                     //
00097   /////////////////////////////////////////////////////////////////////////
00098 
00099   void viewStructure(ostream& ostr) const;  // overrides SMObject
00100 
00101   /////////////////////////////////////////////////////////////////////////
00102   //                                                                     //
00103   // Control:                                                            //
00104   //                                                                     //
00105   /////////////////////////////////////////////////////////////////////////
00106 
00107   void takeControl( );         // overrides ComputationManager
00108 
00109   /////////////////////////////////////////////////////////////////////////
00110   //                                                                     //
00111   // State Transitions:                                                  //
00112   //                                                                     //
00113   /////////////////////////////////////////////////////////////////////////
00114 
00115   void start( );              // overrides ComputationManager
00116 
00117   void terminate( );          // overrides ComputationManager
00118 
00119 
00120 private:
00121 
00122   /////////////////////////////////////////////////////////////////////////
00123   //                                                                     //
00124   // Data Members:                                                       //
00125   //                                                                     //
00126   /////////////////////////////////////////////////////////////////////////
00127 
00128   SMFPGroup& theGroup;
00129 
00130   IsAbelianChecker theChecker;
00131 
00132 
00133   // GCM components this uses; only for automatic ARC passing:
00134 
00135   MirrorSubordinate normalClosure;
00136 
00137   MirrorSubordinate abelianInvariants;
00138 
00139   MirrorSubordinate kbSupervisor;
00140 
00141   MirrorSubordinate agSupervisor;
00142 
00143   MirrorSubordinate computeBasis;
00144 
00145   Subordinate<IsAbelianProblem,NilpotentWPInQuotients> nilpotentWPInQuotients;
00146 
00147   MirrorSubordinate nilpotentQuotients;
00148 
00149   Subordinate<IsAbelianProblem,NilpotentWP> nilpotentWP;
00150 
00151   Subordinate<IsAbelianProblem, GeneticWPCM> genetic;
00152 };
00153 
00154 
00155 
00156 //
00157 //  Class IsAbelianChecker -- inline functions
00158 //
00159 
00160 inline
00161 bool IsAbelianChecker::haveDetails ( ) const
00162 {
00163   return abelianDetails.haveDetails();
00164 }
00165 
00166 inline
00167 Chars IsAbelianChecker::getDetailsFileName( ) const
00168 { 
00169   return abelianDetails.getFileName(); 
00170 }
00171 
00172 #endif

Generated at Tue Jun 19 09:49:41 2001 for Magnus Classes by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001