File: GroupFastChecks.h

package info (click to toggle)
magnus 20060324-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 19,404 kB
  • ctags: 20,466
  • sloc: cpp: 130,118; ansic: 37,076; tcl: 10,970; perl: 1,109; makefile: 963; sh: 403; yacc: 372; csh: 57; awk: 33; asm: 10
file content (88 lines) | stat: -rw-r--r-- 2,807 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Copyright (C) 1996 The New York Group Theory Cooperative
// See magnus/doc/COPYRIGHT for the full notice.

// Contents: Definition of class GroupFastChecks
//
// Principal Author: Dmitry Bormotov
//
// Status: Usable
//
// Usage: Should contain various fast checks applicable in BE & SM.
//
// Special Notes:
//
// Revision History:
//

#ifndef _GroupFastChecks_h_
#define _GroupFastChecks_h_

#include "FPGroup.h"


// --------------------------- GroupFastChecks ------------------------------ //


class GroupFastChecks {

public:

  /////////////////////////////////////////////////////////////////////////
  //                                                                     //
  // Constructors:                                                       //
  //                                                                     //
  /////////////////////////////////////////////////////////////////////////

  GroupFastChecks( const FPGroup& G ) : 
    theGroup( G ),
    numOfGens( G.numberOfGenerators() ),
    relators( G.getRelators() )
  { }

  // Default & copy contructors, operator = provided by compiler.


  /////////////////////////////////////////////////////////////////////////
  //                                                                     //
  // Accessors:                                                          //
  //                                                                     //
  /////////////////////////////////////////////////////////////////////////

  bool hasTrivialPresentation( ) {
    return ( numOfGens == 0 && relators.cardinality() == 0 );
  }
  // True if the entered presentation has form < ; >.


  bool numOfRelsLessNumOfGens( ) { 
    return ( relators.cardinality() < numOfGens ); 
  }
  // True if the number of relators is less than the number of generators.

  bool existsGenWithExpSumZeroInEveryRelator( Generator& );
  // True if there's such generator exponent sum of which is equal to
  // zero in every relator. The generator'll be return as well.

  VectorOf<int> getExpSumOfGen( const Generator& g);
  // Return exponent sums of g in the group relators.

  int GCDOfExpSumOfGen( const Generator& g );
  // Return the GCD of exponent sums of g in the group relators.


private:
 
  /////////////////////////////////////////////////////////////////////////
  //                                                                     //
  // Data Members:                                                       //
  //                                                                     //
  /////////////////////////////////////////////////////////////////////////

  FPGroup theGroup;     // the group to work with
  int numOfGens;        // number of generators of the group
  SetOf<Word> relators; // group relators 
};


#endif