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

/magnus/back_end/SMApps/include/SubgroupContainmentProblem.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: SubgroupContainmentProblem.h,v 1.1 1998/08/03 20:24:17 bormotov Exp $
00003  */
00004  
00005 // Copyright (C) 1998 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 //
00008 // Contents: Implementation of classes 
00009 // 
00010 //
00011 // Principal Author: Dmitry Pechkin
00012 //
00013 // Status: in progress
00014 //
00015 // Revision History:
00016 //
00017 //
00018 
00019 #ifndef _SUBGROUP_CONTAINMENT_PROBLEMS_H_
00020 #define _SUBGROUP_CONTAINMENT_PROBLEMS_H_
00021 
00022 #include "ComputationManager.h"
00023 #include "Supervisor.h"
00024 #include "SGNilpotentQuotients.h"
00025 #include "ToddCoxeter.h"
00026 #include "AP-fixups.h"
00027 
00028 /*
00029 class ExtendedNormalClosureARCer : public ARCer
00030 {
00031 public:
00032 
00033   /////////////////////////////////////////////////////////////////////////
00034   //                                                                     //
00035   // Constructors:                                                       //
00036   //                                                                     //
00037   /////////////////////////////////////////////////////////////////////////
00038 
00039   ExtendedNormalClosureARCer( ComputationManager& boss );
00040 
00041   ~ExtendedNormalClosureARCer( );
00042 
00043     
00044   /////////////////////////////////////////////////////////////////////////
00045   //                                                                     //
00046   // Accessors:                                                          //
00047   //                                                                     //
00048   /////////////////////////////////////////////////////////////////////////
00049 
00050   bool answer( ) { return contains; }
00051 
00052   void setArguments( const FPGroup& G, const VectorOf<Word>& H, 
00053                      const SetOf<Word>& testWords );
00054 
00055   // Inherited from ARCer:
00056   // bool takeControl( );
00057 
00058   
00059   /////////////////////////////////////////////////////////////////////////
00060   //                                                                     //
00061   // IPC interaction members:                                            //
00062   //                                                                     //
00063   /////////////////////////////////////////////////////////////////////////
00064 
00065   void runComputation( );
00066  
00067   void writeResults( ostream& );
00068 
00069   void readResults( istream& );
00070 
00071 
00072 private:
00073 
00074   SetOf<Word> reduceTestingSet( class DecomposeInSubgroupOfFPGroup& D, 
00075                                 SetOf<Word>& testingSet );
00076 
00077   /////////////////////////////////////////////////////////////////////////
00078   //                                                                     //
00079   // Data Members:                                                       //
00080   //                                                                     //
00081   /////////////////////////////////////////////////////////////////////////
00082 
00083   FPGroup theGroup;
00084   VectorOf<Word> theSubgroup;
00085   SetOf<Word> theTestWords;
00086   bool contains;
00087 };
00088 
00089 */
00090 
00091 class SubgroupContainment : public ComputationManager
00092 {
00093 public:
00094 
00095   /////////////////////////////////////////////////////////////////////////
00096   //                                                                     //
00097   // Constructors:                                                       //
00098   //                                                                     //
00099   /////////////////////////////////////////////////////////////////////////
00100 
00101   SubgroupContainment( class SubgroupContainmentProblem& );
00102 
00103   SubgroupContainment( class IsSGNormal& );
00104 
00105   /////////////////////////////////////////////////////////////////////////
00106   //                                                                     //
00107   // Accessors:                                                          //
00108   //                                                                     //
00109   /////////////////////////////////////////////////////////////////////////
00110 
00111   Trichotomy contains() const;
00112 
00113   bool haveDetails( ) const;
00114 
00115   Chars getDecompositionFileName( ) const;
00116 
00117   /////////////////////////////////////////////////////////////////////////
00118   //                                                                     //
00119   // Control:                                                            //
00120   //                                                                     //
00121   /////////////////////////////////////////////////////////////////////////
00122 
00123   void takeControl( );         // overrides ComputationManager
00124 
00125   /////////////////////////////////////////////////////////////////////////
00126   //                                                                     //
00127   // State Transitions:                                                  //
00128   //                                                                     //
00129   /////////////////////////////////////////////////////////////////////////
00130 
00131   void start( ) { };          // overrides ComputationManager
00132 
00133   void terminate( ) { };      // overrides ComputationManager
00134 
00135 
00136 private:
00137 
00138   SetOf<Word> reduceTestingSet( const class DecomposeInSubgroupOfFPGroup& D, 
00139                                 SetOf<Word>& testingSet );
00140 
00141 
00142   /////////////////////////////////////////////////////////////////////////
00143   //                                                                     //
00144   // Data Members:                                                       //
00145   //                                                                     //
00146   /////////////////////////////////////////////////////////////////////////
00147 
00148   const SMSubgroup& theSubgroup;
00149   VectorOf<Word> theTestWords;
00150   SetOf<Word> wordsToCheck;
00151   Trichotomy theAnswer;
00152 
00153   DetailedReport wordsDecomposition;
00154 };
00155 
00156 
00157 class SubgroupContainmentProblem : public Supervisor 
00158 {
00159 public:
00160 
00161   /////////////////////////////////////////////////////////////////////////
00162   //                                                                     //
00163   // Constructors:                                                       //
00164   //                                                                     //
00165   /////////////////////////////////////////////////////////////////////////
00166 
00167   SubgroupContainmentProblem( class SMSubgroup& subgroup, class SMWord& w );
00168 
00169   /////////////////////////////////////////////////////////////////////////
00170   //                                                                     //
00171   // Accessors:                                                          //
00172   //                                                                     //
00173   /////////////////////////////////////////////////////////////////////////
00174 
00175   const SMSubgroup& getSubgroup() const { return theSubgroup; }
00176 
00177   const SMWord& getTestWord( ) const { return theTestWord; }
00178 
00179   //  Trichotomy answer( ) const { return theAnswer; }
00180   // When a WordProblem is used internally, it does not report the result
00181   // to the FE, but just sits and waits to be polled through this member.
00182   // yes => trivial, no => not trivial, dontknow => not done yet.
00183 
00184   /////////////////////////////////////////////////////////////////////////
00185   //                                                                     //
00186   // Front End Interfacing:                                              //
00187   //                                                                     //
00188   /////////////////////////////////////////////////////////////////////////
00189 
00190   void viewStructure(ostream& ostr) const;  // overrides SMObject
00191 
00192   /////////////////////////////////////////////////////////////////////////
00193   //                                                                     //
00194   // Control:                                                            //
00195   //                                                                     //
00196   /////////////////////////////////////////////////////////////////////////
00197 
00198   void takeControl( );         // overrides ComputationManager
00199 
00200   /////////////////////////////////////////////////////////////////////////
00201   //                                                                     //
00202   // State Transitions:                                                  //
00203   //                                                                     //
00204   /////////////////////////////////////////////////////////////////////////
00205 
00206   void start( );              // overrides ComputationManager
00207 
00208   void terminate( );          // overrides ComputationManager
00209 
00210 private:
00211 
00212   /////////////////////////////////////////////////////////////////////////
00213   //                                                                     //
00214   // Data Members:                                                       //
00215   //                                                                     //
00216   /////////////////////////////////////////////////////////////////////////
00217 
00218   const SMSubgroup& theSubgroup;
00219   const SMWord& theTestWord;
00220 
00221   // Housekeeping members:
00222   Trichotomy isWordInSubgroup;
00223   Chars explanation;
00224 
00225   // GCM components this uses; only for automatic ARC passing:
00226 
00227   Subordinate<SubgroupContainmentProblem,SubgroupContainment> subgroupContain;
00228   MirrorSubordinate normalClosure;
00229 
00230   MirrorSubordinate abelianInvariants;
00231   MirrorSubordinate sgNilpotentQuotients;
00232   Subordinate<SubgroupContainmentProblem, SCPinNilpotentQuotients> 
00233     scpInNilpotentQuotients;
00234 
00235   MirrorSubordinate toddCoxeter;
00236   Subordinate<SubgroupContainmentProblem, WordRepresentative> wordRepCM;
00237   
00238 };
00239 
00240 
00241 
00242 
00243 class IsSGNormal : public Supervisor 
00244 {
00245 public:
00246 
00247   /////////////////////////////////////////////////////////////////////////
00248   //                                                                     //
00249   // Constructors:                                                       //
00250   //                                                                     //
00251   /////////////////////////////////////////////////////////////////////////
00252 
00253   IsSGNormal( class SMSubgroup& subgroup );
00254 
00255   /////////////////////////////////////////////////////////////////////////
00256   //                                                                     //
00257   // Accessors:                                                          //
00258   //                                                                     //
00259   /////////////////////////////////////////////////////////////////////////
00260 
00261   const SMSubgroup& getSubgroup() const { return theSubgroup; }
00262 
00263   SetOf<Word> getTestWords( ) const { return theTestWords; }
00264 
00265   /////////////////////////////////////////////////////////////////////////
00266   //                                                                     //
00267   // Front End Interfacing:                                              //
00268   //                                                                     //
00269   /////////////////////////////////////////////////////////////////////////
00270 
00271   void viewStructure(ostream& ostr) const;  // overrides SMObject
00272 
00273   /////////////////////////////////////////////////////////////////////////
00274   //                                                                     //
00275   // Control:                                                            //
00276   //                                                                     //
00277   /////////////////////////////////////////////////////////////////////////
00278 
00279   void takeControl( );         // overrides ComputationManager
00280 
00281   /////////////////////////////////////////////////////////////////////////
00282   //                                                                     //
00283   // State Transitions:                                                  //
00284   //                                                                     //
00285   /////////////////////////////////////////////////////////////////////////
00286 
00287   void start( );              // overrides ComputationManager
00288 
00289   void terminate( );          // overrides ComputationManager
00290 
00291 private:
00292 
00293   SetOf<Word> makeTestWords( const class SMSubgroup& H ) const;
00294 
00295   /////////////////////////////////////////////////////////////////////////
00296   //                                                                     //
00297   // Data Members:                                                       //
00298   //                                                                     //
00299   /////////////////////////////////////////////////////////////////////////
00300 
00301   const SMSubgroup& theSubgroup;
00302   SetOf<Word> theTestWords;
00303   Trichotomy isNormal;
00304   Chars explanation;
00305 
00306   Subordinate<IsSGNormal,SubgroupContainment>  subgroupContain;
00307   MirrorSubordinate normalClosure;
00308   MirrorSubordinate abelianInvariants;
00309   MirrorSubordinate sgNilpotentQuotients;
00310   Subordinate<IsSGNormal, SCPinNilpotentQuotients>  scpInNilpotentQuotients;
00311   MirrorSubordinate toddCoxeter;
00312   Subordinate<IsSGNormal, WordRepresentative> wordRepCM;
00313 };
00314 
00315 
00316 
00317 inline
00318 bool SubgroupContainment::haveDetails ( ) const 
00319 { 
00320   return wordsDecomposition.haveDetails(); 
00321 }
00322 
00323 inline
00324 Chars SubgroupContainment::getDecompositionFileName( ) const 
00325 { 
00326   return wordsDecomposition.getFileName(); 
00327 }
00328 
00329 #endif

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