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

/magnus/back_end/SMApps/include/WordProblem.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: WordProblem.h,v 1.13 2000/10/07 18:38:01 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 ORWordProblemARCer, ORWordProblemCM,
00009 //           WordProblem
00010 //
00011 // Principal Author: Dmitry Bormotov
00012 //
00013 // Status: in progress
00014 //
00015 // Revision History:
00016 //
00017 
00018 
00019 #ifndef _WordProblem_h_
00020 #define _WordProblem_h_
00021 
00022 
00023 #include "Supervisor.h"
00024 #include "SMWord.h"
00025 #include "SetOfWordsChecker.h"
00026 #include "NilpotentQuotients.h"
00027 #include "ARCer.h"
00028 #include "GeneticProblems.h"
00029 #include "FNWP.h"
00030 #include "GAWordProblemForORGroup.h"
00031 
00032 
00033 // ------------------------ ORWordProblemARCer ----------------------------- //
00034 
00035 
00036 class ORWordProblemARCer : public ARCer
00037 {
00038 public:
00039 
00040   /////////////////////////////////////////////////////////////////////////
00041   //                                                                     //
00042   // Constructors:                                                       //
00043   //                                                                     //
00044   /////////////////////////////////////////////////////////////////////////
00045 
00046   ORWordProblemARCer( ComputationManager& );
00047 
00048 
00049   /////////////////////////////////////////////////////////////////////////
00050   //                                                                     //
00051   // Accessors:                                                          //
00052   //                                                                     //
00053   /////////////////////////////////////////////////////////////////////////
00054 
00055   void setArguments( const Word& relator, const Word& testWord );
00056 
00057   bool getRetValue() { return retValue; }
00058 
00059   ProductOfRelatorConjugates wordDecomposition() const { return wDeco; }
00060 
00061   // Inherited from ARCer:
00062   // bool takeControl( );
00063 
00064 
00065   /////////////////////////////////////////////////////////////////////////
00066   //                                                                     //
00067   // IPC interaction members:                                            //
00068   //                                                                     //
00069   /////////////////////////////////////////////////////////////////////////
00070 
00071   void runComputation( );
00072 
00073   void writeResults( ostream& );
00074 
00075   void readResults( istream& );
00076 
00077   
00078 private:
00079 
00080   /////////////////////////////////////////////////////////////////////////
00081   //                                                                     //
00082   // Private functions:                                                  //
00083   //                                                                     //
00084   /////////////////////////////////////////////////////////////////////////
00085 
00086   void printWord(const Word& w, ostream& ostr);
00087 
00088 
00089   /////////////////////////////////////////////////////////////////////////
00090   //                                                                     //
00091   // Data Members:                                                       //
00092   //                                                                     //
00093   /////////////////////////////////////////////////////////////////////////
00094 
00095   Word theRelator;
00096   Word theTestWord;
00097 
00098   Trichotomy answer;
00099   bool retValue;
00100   ProductOfRelatorConjugates wDeco;
00101 };
00102 
00103 
00104 
00105 // -------------------------- ORWordProblemCM ------------------------------ //
00106 
00107 
00108 class ORWordProblemCM : public ComputationManager
00109 {
00110 public:
00111 
00112   /////////////////////////////////////////////////////////////////////////
00113   //                                                                     //
00114   // Constructors:                                                       //
00115   //                                                                     //
00116   /////////////////////////////////////////////////////////////////////////
00117 
00118   ORWordProblemCM( class WordProblem& PO );
00119 
00120   //  ~ORWordProblemCM( );
00121 
00122   /////////////////////////////////////////////////////////////////////////
00123   //                                                                     //
00124   // Accessors:                                                          //
00125   //                                                                     //
00126   /////////////////////////////////////////////////////////////////////////
00127 
00128   Trichotomy isTrivial( ) { return itIsTrivial; }
00129 
00130   ProductOfRelatorConjugates wordDecomposition() const { return wDeco; }
00131 
00132     
00133   /////////////////////////////////////////////////////////////////////////
00134   //                                                                     //
00135   // Control:                                                            //
00136   //                                                                     //
00137   /////////////////////////////////////////////////////////////////////////
00138 
00139   void takeControl( );         // overrides ComputationManager
00140 
00141   /////////////////////////////////////////////////////////////////////////
00142   //                                                                     //
00143   // State Transitions:                                                  //
00144   //                                                                     //
00145   /////////////////////////////////////////////////////////////////////////
00146 
00147   void start( );              // overrides ComputationManager
00148 
00149   void terminate( );          // overrides ComputationManager
00150 
00151 
00152 private:
00153 
00154   /////////////////////////////////////////////////////////////////////////
00155   //                                                                     //
00156   // Data Members:                                                       //
00157   //                                                                     //
00158   /////////////////////////////////////////////////////////////////////////
00159 
00160   Word theRelator;
00161   const SMWord& testWord;
00162   
00163   Trichotomy itIsTrivial;
00164   bool bStarted;
00165   ProductOfRelatorConjugates wDeco;
00166 
00167   ORWordProblemARCer arcer;
00168 };
00169 
00170 
00171 // ----------------------------- WordProblem ------------------------------- //
00172 
00173 
00174 class WordProblem : public Supervisor
00175 {
00176 
00177 public:
00178 
00179   /////////////////////////////////////////////////////////////////////////
00180   //                                                                     //
00181   // Constructors:                                                       //
00182   //                                                                     //
00183   /////////////////////////////////////////////////////////////////////////
00184 
00185   WordProblem( class SMWord& w);
00186 
00187   /////////////////////////////////////////////////////////////////////////
00188   //                                                                     //
00189   // Accessors:                                                          //
00190   //                                                                     //
00191   /////////////////////////////////////////////////////////////////////////
00192 
00193   Trichotomy answer( ) const { return theAnswer; }
00194   // When a WordProblem is used internally, it does not report the result
00195   // to the FE, but just sits and waits to be polled through this member.
00196   // yes => trivial, no => not trivial, dontknow => not done yet.
00197 
00198   const SMWord& getTestWord( ) const { return theWord; }
00199 
00200   /////////////////////////////////////////////////////////////////////////
00201   //                                                                     //
00202   // Front End Interfacing:                                              //
00203   //                                                                     //
00204   /////////////////////////////////////////////////////////////////////////
00205 
00206   void viewStructure(ostream& ostr) const;  // overrides SMObject
00207 
00208   /////////////////////////////////////////////////////////////////////////
00209   //                                                                     //
00210   // Control:                                                            //
00211   //                                                                     //
00212   /////////////////////////////////////////////////////////////////////////
00213 
00214   void takeControl( );         // overrides ComputationManager
00215 
00216   /////////////////////////////////////////////////////////////////////////
00217   //                                                                     //
00218   // State Transitions:                                                  //
00219   //                                                                     //
00220   /////////////////////////////////////////////////////////////////////////
00221 
00222   void start( ) { }           // overrides ComputationManager
00223 
00224   void terminate( ) { }       // overrides ComputationManager
00225 
00226 
00227 private:
00228 
00229   /////////////////////////////////////////////////////////////////////////
00230   //                                                                     //
00231   // Data Members:                                                       //
00232   //                                                                     //
00233   /////////////////////////////////////////////////////////////////////////
00234 
00235   SMWord& theWord;
00236 
00237   SetOfWordsChecker theChecker;
00238 
00239 
00240   // Housekeeping members:
00241 
00242   Trichotomy theAnswer;
00243 
00244   Chars explanation;
00245 
00246   bool triedAbelianization;
00247   
00248 
00249   // GCM components this uses; only for automatic ARC passing:
00250 
00251   MirrorSubordinate normalClosure;
00252 
00253   MirrorSubordinate abelianInvariants;
00254 
00255   MirrorSubordinate kbSupervisor;
00256 
00257   MirrorSubordinate agSupervisor;
00258 
00259   MirrorSubordinate computeBasis;
00260 
00261   MirrorSubordinate nilpotentQuotients;
00262 
00263   Subordinate<WordProblem,NilpotentWPInQuotients> nilpotentWPInQuotients;
00264 
00265   Subordinate<WordProblem, ORWordProblemCM> orwp;
00266 
00267   Subordinate<WordProblem, NilpotentWP> nilpotentWP;
00268 
00269   Subordinate<WordProblem, GeneticWPCM> genetic;
00270 
00271   bool linkGenORHasBeenSent;
00272   Subordinate<WordProblem, GAWordForORGroup> geneticForORG;
00273 
00274   Subordinate<WordProblem, FNWPCM> fnwp;
00275 };
00276 
00277 #endif
00278 
00279 

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