69.3 Parametrized Maps

A parametrized map is a list whose i-th entry is either unbound (which means that nothing is known about the image(s) of the i-th class) or the image of the i-th class (i.e., an integer for fusion maps, power maps, element orders etc., and a cyclotomic for characters), or a list of possible images of the i-th class. In this sense, maps are special parametrized maps. We often identify a parametrized map paramap with the set of all maps map with the property that either map[i] = paramap[i] or map[i] is contained in the list paramap[i]; we say then that map is contained in paramap.

This definition implies that parametrized maps cannot be used to describe sets of maps where lists are possible images. An exception are strings which naturally arise as images when class names are considered. So strings and lists of strings are allowed in parametrized maps, and character constants (see Chapter Strings and Characters) are not allowed in maps.

  • CompositionMaps( paramap2, paramap1[, class] ) F

    The composition of two parametrized maps paramap1, paramap2 is defined as the parametrized map comp that contains all compositions f2 °f1 of elements f1 of paramap1 and f2 of paramap2. For example, the composition of a character c of a group G by a parametrized class fusion map from a subgroup H to G is the parametrized map that contains all restrictions of c by elements of the parametrized fusion map.

    CompositionMaps( paramap2, paramap1 ) is a parametrized map with entry CompositionMaps( paramap2, paramap1, class ) at position class. If paramap1[class] is an integer then CompositionMaps( paramap2, paramap1, class ) is equal to paramap2[ paramap1[ class ] ]. Otherwise it is the union of paramap2[i] for i in paramap1[ class ].

    gap> map1:= [ 1, [ 2 .. 4 ], [ 4, 5 ], 1 ];;
    gap> map2:= [ [ 1, 2 ], 2, 2, 3, 3 ];;
    gap> CompositionMaps( map2, map1 );
    [ [ 1, 2 ], [ 2, 3 ], 3, [ 1, 2 ] ]
    gap> CompositionMaps( map1, map2 );
    [ [ 1, 2, 3, 4 ], [ 2, 3, 4 ], [ 2, 3, 4 ], [ 4, 5 ], [ 4, 5 ] ]
    

  • InverseMap( paramap ) F

    For a parametrized map paramap, InverseMap returns a mutable parametrized map whose i-th entry is unbound if i is not in the image of paramap, equal to j if i is (in) the image of paramap[j] exactly for j, and equal to the set of all preimages of i under paramap otherwise.

    We have CompositionMaps( paramap, InverseMap( paramap ) ) the identity map.

    gap> tbl:= CharacterTable( "2.A5" );;  f:= CharacterTable( "A5" );;
    gap> fus:= GetFusionMap( tbl, f );
    [ 1, 1, 2, 3, 3, 4, 4, 5, 5 ]
    gap> inv:= InverseMap( fus );
    [ [ 1, 2 ], 3, [ 4, 5 ], [ 6, 7 ], [ 8, 9 ] ]
    gap> CompositionMaps( fus, inv );
    [ 1, 2, 3, 4, 5 ]
    gap> # transfer a power map ``up'' to the factor group
    gap> pow:= PowerMap( tbl, 2 );
    [ 1, 1, 2, 4, 4, 8, 8, 6, 6 ]
    gap> CompositionMaps( fus, CompositionMaps( pow, inv ) );
    [ 1, 1, 3, 5, 4 ]
    gap> last = PowerMap( f, 2 );
    true
    gap> # transfer a power map of the factor group ``down'' to the group
    gap> CompositionMaps( inv, CompositionMaps( PowerMap( f, 2 ), fus ) );
    [ [ 1, 2 ], [ 1, 2 ], [ 1, 2 ], [ 4, 5 ], [ 4, 5 ], [ 8, 9 ], [ 8, 9 ], 
      [ 6, 7 ], [ 6, 7 ] ]
    

  • ProjectionMap( fusionmap ) F

    For a map fusionmap, ProjectionMap returns a parametrized map whose i-th entry is unbound if i is not in the image of fusionmap, and equal to j if j is the smallest position such that i is the image of fusionmap[j].

    We have CompositionMaps( fusionmap, ProjectionMap( fusionmap ) ) the identity map, i.e., first projecting and then fusing yields the identity. Note that fusionmap must not be a parametrized map.

    gap> ProjectionMap( [ 1, 1, 1, 2, 2, 2, 3, 4, 5, 5, 5, 6, 6, 6 ] );
    [ 1, 4, 7, 8, 9, 12 ]
    

  • Indirected( character, paramap ) F

    For a map character and a parametrized map paramap, Indirected returns a parametrized map whose entry at position i is character[ paramap[i] ] if paramap[i] is an integer, and an unknown (see Chapter Unknowns) otherwise.

    gap> tbl:= CharacterTable( "M12" );;
    gap> fus:= [ 1, 3, 4, [ 6, 7 ], 8, 10, [ 11, 12 ], [ 11, 12 ],
    >            [ 14, 15 ], [ 14, 15 ] ];;
    gap> List( Irr( tbl ){ [ 1 .. 6 ] }, x -> Indirected( x, fus ) );
    [ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 
      [ 11, 3, 2, Unknown(9), 1, 0, Unknown(10), Unknown(11), 0, 0 ], 
      [ 11, 3, 2, Unknown(12), 1, 0, Unknown(13), Unknown(14), 0, 0 ], 
      [ 16, 0, -2, 0, 1, 0, 0, 0, Unknown(15), Unknown(16) ], 
      [ 16, 0, -2, 0, 1, 0, 0, 0, Unknown(17), Unknown(18) ], 
      [ 45, -3, 0, 1, 0, 0, -1, -1, 1, 1 ] ]
    

  • Parametrized( list ) F

    For a list list of (parametrized) maps of the same length, Parametrized returns the smallest parametrized map containing all elements of list.

    Parametrized is the inverse function to ContainedMaps (see ContainedMaps).

    gap> Parametrized( [ [ 1, 2, 3, 4, 5 ], [ 1, 3, 2, 4, 5 ],
    >                    [ 1, 2, 3, 4, 6 ] ] );
    [ 1, [ 2, 3 ], [ 2, 3 ], 4, [ 5, 6 ] ]
    

  • ContainedMaps( paramap ) F

    For a parametrized map paramap, ContainedMaps returns the set of all maps contained in paramap.

    ContainedMaps is the inverse function to Parametrized (see Parametrized) in the sense that Parametrized( ContainedMaps( paramap ) ) is equal to paramap.

    gap> ContainedMaps( [ 1, [ 2, 3 ], [ 2, 3 ], 4, [ 5, 6 ] ] );
    [ [ 1, 2, 2, 4, 5 ], [ 1, 2, 2, 4, 6 ], [ 1, 2, 3, 4, 5 ], [ 1, 2, 3, 4, 6 ], 
      [ 1, 3, 2, 4, 5 ], [ 1, 3, 2, 4, 6 ], [ 1, 3, 3, 4, 5 ], [ 1, 3, 3, 4, 6 ] ]
    

  • UpdateMap( character, paramap, indirected ) F

    Let character be a map, paramap a parametrized map, and indirected a parametrized map that is contained in CompositionMaps( character, paramap ).

    Then UpdateMap changes paramap to the parametrized map containing exactly the maps whose composition with character is equal to indirected.

    If a contradiction is detected then false is returned immediately, otherwise true.

    gap> subtbl:= CharacterTable( "S4(4).2" );;  tbl:= CharacterTable( "He" );;
    gap> fus:= InitFusion( subtbl, tbl );;
    gap> fus;
    [ 1, 2, 2, [ 2, 3 ], 4, 4, [ 7, 8 ], [ 7, 8 ], 9, 9, 9, [ 10, 11 ], 
      [ 10, 11 ], 18, 18, 25, 25, [ 26, 27 ], [ 26, 27 ], 2, [ 6, 7 ], [ 6, 7 ], 
      [ 6, 7, 8 ], 10, 10, 17, 17, 18, [ 19, 20 ], [ 19, 20 ] ]
    gap> chi:= Irr( tbl )[2];
    Character( CharacterTable( "He" ), [ 51, 11, 3, 6, 0, 3, 3, -1, 1, 2, 0, 
      3*E(7)+3*E(7)^2+3*E(7)^4, 3*E(7)^3+3*E(7)^5+3*E(7)^6, 2, 
      E(7)+E(7)^2+2*E(7)^3+E(7)^4+2*E(7)^5+2*E(7)^6, 
      2*E(7)+2*E(7)^2+E(7)^3+2*E(7)^4+E(7)^5+E(7)^6, 1, 1, 0, 0, 
      -E(7)-E(7)^2-E(7)^4, -E(7)^3-E(7)^5-E(7)^6, E(7)+E(7)^2+E(7)^4, 
      E(7)^3+E(7)^5+E(7)^6, 1, 0, 0, -1, -1, 0, 0, E(7)+E(7)^2+E(7)^4, 
      E(7)^3+E(7)^5+E(7)^6 ] )
    gap> filt:= Filtered( Irr( subtbl ), x -> x[1] = 50 );
    [ Character( CharacterTable( "S4(4).2" ), [ 50, 10, 10, 2, 5, 5, -2, 2, 0, 0, 
          0, 1, 1, 0, 0, 0, 0, -1, -1, 10, 2, 2, 2, 1, 1, 0, 0, 0, -1, -1 ] ), 
      Character( CharacterTable( "S4(4).2" ), [ 50, 10, 10, 2, 5, 5, -2, 2, 0, 0, 
          0, 1, 1, 0, 0, 0, 0, -1, -1, -10, -2, -2, -2, -1, -1, 0, 0, 0, 1, 1 ] ) 
     ]
    gap> UpdateMap( chi, fus, filt[1] + TrivialCharacter( subtbl ) );
    true
    gap> fus;
    [ 1, 2, 2, 3, 4, 4, 8, 7, 9, 9, 9, 10, 10, 18, 18, 25, 25, [ 26, 27 ], 
      [ 26, 27 ], 2, [ 6, 7 ], [ 6, 7 ], [ 6, 7 ], 10, 10, 17, 17, 18, 
      [ 19, 20 ], [ 19, 20 ] ]
    

  • MeetMaps( paramap1, paramap2 ) F

    For two parametrized maps paramap1 and paramap2, MeetMaps changes paramap1 such that the image of class i is the intersection of paramap1[i] and paramap2[i].

    If this implies that no images remain for a class, the position of such a class is returned. If no such inconsistency occurs, MeetMaps returns true.

    gap> map1:= [ [ 1, 2 ], [ 3, 4 ], 5, 6, [ 7, 8, 9 ] ];;
    gap> map2:= [ [ 1, 3 ], [ 3, 4 ], [ 5, 6 ], 6, [ 8, 9, 10 ] ];;
    gap> MeetMaps( map1, map2 );  map1;
    true
    [ 1, [ 3, 4 ], 5, 6, [ 8, 9 ] ]
    

  • CommutativeDiagram( paramap1, paramap2, paramap3, paramap4[, improvements] ) F

    Let paramap1, paramap2, paramap3, paramap4 be parametrized maps covering parametrized maps f1, f2, f3, f4 with the property that CompositionMaps( f2, f1 ) is equal to CompositionMaps( f4, f3 ).

    CommutativeDiagram checks this consistency, and changes the arguments such that all possible images are removed that cannot occur in the parametrized maps fi.

    The return value is fail if an inconsistency was found. Otherwise a record with the components imp1, imp2, imp3, imp4 is returned, each bound to the list of positions where the corresponding parametrized map was changed,

    The optional argument improvements must be a record with components imp1, imp2, imp3, imp4. If such a record is specified then only diagrams are considered where entries of the i-th component occur as preimages of the i-th parametrized map.

    When an inconsistency is deteted, CommutativeDiagram immediately returns fail. Otherwise a record is returned that contains four lists imp1, ¼, imp4: impi is the list of classes where paramap_i was changed.

    gap> map1:= [ [ 1, 2, 3 ], [ 1, 3 ] ];;  map2:= [ [ 1, 2 ], 1, [ 1, 3 ] ];;
    gap> map3:= [ [ 2, 3 ], 3 ];;  map4:= [ , 1, 2, [ 1, 2 ] ];;
    gap> imp:= CommutativeDiagram( map1, map2, map3, map4 );
    rec( imp1 := [ 2 ], imp2 := [ 1 ], imp3 := [  ], imp4 := [  ] )
    gap> map1;  map2;  map3;  map4;
    [ [ 1, 2, 3 ], 1 ]
    [ 2, 1, [ 1, 3 ] ]
    [ [ 2, 3 ], 3 ]
    [ , 1, 2, [ 1, 2 ] ]
    gap> imp2:= CommutativeDiagram( map1, map2, map3, map4, imp );
    rec( imp1 := [  ], imp2 := [  ], imp3 := [  ], imp4 := [  ] )
    

  • CheckFixedPoints( inside1, between, inside2 ) F

    Let inside1, between, inside2 be parametrized maps, where between is assumed to map each fixed point of inside1 (that is, inside1[i] = i) to a fixed point of inside2 (that is, between[i] is either an integer that is fixed by inside2 or a list that has nonempty intersection with the union of its images under inside2). CheckFixedPoints changes between and inside2 by removing all those entries violate this condition.

    When an inconsistency is detected, CheckFixedPoints immediately returns fail. Otherwise the list of positions is returned where changes occurred.

    gap> subtbl:= CharacterTable( "L4(3).2_2" );;
    gap> tbl:= CharacterTable( "O7(3)" );;
    gap> fus:= InitFusion( subtbl, tbl );;  fus{ [ 48, 49 ] };
    [ [ 54, 55, 56, 57 ], [ 54, 55, 56, 57 ] ]
    gap> CheckFixedPoints( ComputedPowerMaps( subtbl )[5], fus,
    >        ComputedPowerMaps( tbl )[5] );
    [ 48, 49 ]
    gap> fus{ [ 48, 49 ] };
    [ [ 56, 57 ], [ 56, 57 ] ]
    

  • TransferDiagram( inside1, between, inside2[, improvements] ) F

    Let inside1, between, inside2 be parametrized maps covering parametrized maps m1, f, m2 with the property that CompositionMaps( m2, f ) is equal to CompositionMaps( f, m1 ).

    TransferDiagram checks this consistency, and changes the arguments such that all possible images are removed that cannot occur in the parametrized maps mi and f.

    So TransferDiagram is similar to CommutativeDiagram (see CommutativeDiagram), but between occurs twice in each diagram checked.

    If a record improvements with fields impinside1, impbetween and impinside2 is specified, only those diagrams with elements of impinside1 as preimages of inside1, elements of impbetween as preimages of between or elements of impinside2 as preimages of inside2 are considered.

    When an inconsistency is detected, TransferDiagram immediately returns fail. Otherwise a record is returned that contains three lists impinside1, impbetween, and impinside2 of positions where the arguments were changed.

    gap> subtbl:= CharacterTable( "2F4(2)" );;  tbl:= CharacterTable( "Ru" );;
    gap> fus:= InitFusion( subtbl, tbl );;
    gap> permchar:= Sum( Irr( tbl ){ [ 1, 5, 6 ] } );;
    gap> CheckPermChar( subtbl, tbl, fus, permchar );; fus;
    [ 1, 2, 2, 4, 5, 7, 8, 9, 11, 14, 14, [ 13, 15 ], 16, [ 18, 19 ], 20, 
      [ 25, 26 ], [ 25, 26 ], 5, 5, 6, 8, 14, [ 13, 15 ], [ 18, 19 ], [ 18, 19 ], 
      [ 25, 26 ], [ 25, 26 ], 27, 27 ]
    gap> tr:= TransferDiagram( PowerMap( subtbl, 2 ), fus, PowerMap( tbl, 2 ) );
    rec( impinside1 := [  ], impbetween := [ 12, 23 ], impinside2 := [  ] )
    gap> tr:= TransferDiagram( PowerMap( subtbl, 3 ), fus, PowerMap( tbl, 3 ) );
    rec( impinside1 := [  ], impbetween := [ 14, 24, 25 ], impinside2 := [  ] )
    gap> tr:= TransferDiagram( PowerMap( subtbl, 3 ), fus, PowerMap( tbl, 3 ),
    >             tr );
    rec( impinside1 := [  ], impbetween := [  ], impinside2 := [  ] )
    gap> fus;
    [ 1, 2, 2, 4, 5, 7, 8, 9, 11, 14, 14, 15, 16, 18, 20, [ 25, 26 ], [ 25, 26 ], 
      5, 5, 6, 8, 14, 13, 19, 19, [ 25, 26 ], [ 25, 26 ], 27, 27 ]
    

  • TestConsistencyMaps( powermap1, fusionmap, powermap2[, fus_imp] ) F

    Let powermap1 and powermap2 be lists of parametrized maps, and fusionmap a parametrized map, such that for each i, the i-th entry in powermap1, fusionmap, and the i-th entry in powermap2 (if bound) are valid arguments for TransferDiagram (see TransferDiagram). So a typical situation for applying TestConsistencyMaps is that fusionmap is an approximation of a class fusion, and powermap1, powermap2 are the lists of power maps of the subgroup and the group.

    TestConsistencyMaps repeatedly applies TransferDiagram to these arguments for all i until no more changes occur.

    If a list fus_imp is specified then only those diagrams with elements of fus_imp as preimages of fusionmap are considered.

    When an inconsistency is detected, TestConsistencyMaps immediately returns false. Otherwise true is returned.

    gap> subtbl:= CharacterTable( "2F4(2)" );;  tbl:= CharacterTable( "Ru" );;
    gap> fus:= InitFusion( subtbl, tbl );;
    gap> permchar:= Sum( Irr( tbl ){ [ 1, 5, 6 ] } );;
    gap> CheckPermChar( subtbl, tbl, fus, permchar );; fus;
    [ 1, 2, 2, 4, 5, 7, 8, 9, 11, 14, 14, [ 13, 15 ], 16, [ 18, 19 ], 20, 
      [ 25, 26 ], [ 25, 26 ], 5, 5, 6, 8, 14, [ 13, 15 ], [ 18, 19 ], [ 18, 19 ], 
      [ 25, 26 ], [ 25, 26 ], 27, 27 ]
    gap> TestConsistencyMaps( ComputedPowerMaps( subtbl ), fus,
    >        ComputedPowerMaps( tbl ) );
    true
    gap> fus;
    [ 1, 2, 2, 4, 5, 7, 8, 9, 11, 14, 14, 15, 16, 18, 20, [ 25, 26 ], [ 25, 26 ], 
      5, 5, 6, 8, 14, 13, 19, 19, [ 25, 26 ], [ 25, 26 ], 27, 27 ]
    gap> Indeterminateness( fus );
    16
    

  • Indeterminateness( paramap ) F

    For a parametrized map paramap, Indeterminateness returns the number of maps contained in paramap, that is, the product of lengths of lists in paramap denoting lists of several images.

    gap> Indeterminateness( [ 1, [ 2, 3 ], [ 4, 5 ], [ 6, 7, 8, 9, 10 ], 11 ] );
    20
    

  • PrintAmbiguity( list, paramap ) F

    For each map in the list list, PrintAmbiguity prints its position in list, the indeterminateness (see Indeterminateness) of the composition with the parametrized map paramap, and the list of positions where a list of images occurs in this composition.

    gap> paramap:= [ 1, [ 2, 3 ], [ 3, 4 ], [ 2, 3, 4 ], 5 ];;
    gap> list:= [ [ 1, 1, 1, 1, 1 ], [ 1, 1, 2, 2, 3 ], [ 1, 2, 3, 4, 5 ] ];;
    gap> PrintAmbiguity( list, paramap );
    1 1 [  ]
    2 4 [ 2, 4 ]
    3 12 [ 2, 3, 4 ]
    

  • ContainedSpecialVectors( tbl, chars, paracharacter, func ) F
  • IntScalarProducts( tbl, chars, candidate ) F
  • NonnegIntScalarProducts( tbl, chars, candidate ) F
  • ContainedPossibleVirtualCharacters( tbl, chars, paracharacter ) F
  • ContainedPossibleCharacters( tbl, chars, paracharacter ) F

    Let tbl be an ordinary character table, chars a list of class functions (or values lists), paracharacter a parametrized class function of tbl, and func a function that expects the three arguments tbl, chars, and a values list of a class function, and that returns either true or false.

    ContainedSpecialVectors returns the list of all those elements vec of paracharacter that have integral norm, have integral scalar product with the principal character of tbl, and that satisfy func( tbl, chars, vec ) = true,

    Two special cases of func are the check whether the scalar products in tbl between the vector vec and all lists in chars are integers or nonnegative integers, respectively. These functions are accessible as global variables IntScalarProducts and NonnegIntScalarProducts, and ContainedPossibleVirtualCharacters and ContainedPossibleCharacters provide access to these special cases of ContainedSpecialVectors.

    gap> subtbl:= CharacterTable( "HSM12" );;  tbl:= CharacterTable( "HS" );;
    gap> fus:= InitFusion( subtbl, tbl );;
    gap> rest:= CompositionMaps( Irr( tbl )[8], fus );
    [ 231, [ -9, 7 ], [ -9, 7 ], [ -9, 7 ], 6, 15, 15, [ -1, 15 ], [ -1, 15 ], 1, 
      [ 1, 6 ], [ 1, 6 ], [ 1, 6 ], [ 1, 6 ], [ -2, 0 ], [ 1, 2 ], [ 1, 2 ], 
      [ 1, 2 ], 0, 0, 1, 0, 0, 0, 0 ]
    gap> irr:= Irr( subtbl );;
    gap> # no further condition
    gap> cont1:= ContainedSpecialVectors( subtbl, irr, rest,
    >                function( tbl, chars, vec ) return true; end );;
    gap> Length( cont1 );
    24
    gap> # require scalar products to be integral
    gap> cont2:= ContainedSpecialVectors( subtbl, irr, rest,
    >                IntScalarProducts );;
    [ [ 231, 7, -9, -9, 6, 15, 15, -1, -1, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 
          0, 0, 0, 0 ], 
      [ 231, 7, -9, 7, 6, 15, 15, -1, -1, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 0, 
          0, 0, 0 ], 
      [ 231, 7, -9, -9, 6, 15, 15, 15, 15, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 
          0, 0, 0, 0 ], 
      [ 231, 7, -9, 7, 6, 15, 15, 15, 15, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 0, 
          0, 0, 0 ] ]
    gap> # additionally require scalar products to be nonnegative
    gap> cont3:= ContainedSpecialVectors( subtbl, irr, rest,
    >                NonnegIntScalarProducts );
    [ [ 231, 7, -9, -9, 6, 15, 15, -1, -1, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 
          0, 0, 0, 0 ], 
      [ 231, 7, -9, 7, 6, 15, 15, -1, -1, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 0, 
          0, 0, 0 ] ]
    gap> cont2 = ContainedPossibleVirtualCharacters( subtbl, irr, rest );
    true
    gap> cont3 = ContainedPossibleCharacters( subtbl, irr, rest );
    true
    

  • CollapsedMat( mat, maps ) F

    is a record with components

    fusion fusion that collapses those columns of mat that are equal in mat and also for all maps in the list maps,

    mat the image of mat under that fusion.

    gap> mat:= [ [ 1, 1, 1, 1 ], [ 2, -1, 0, 0 ], [ 4, 4, 1, 1 ] ];;
    gap> coll:= CollapsedMat( mat, [] );
    rec( mat := [ [ 1, 1, 1 ], [ 2, -1, 0 ], [ 4, 4, 1 ] ], 
      fusion := [ 1, 2, 3, 3 ] )
    gap> List( last.mat, x -> x{ last.fusion } ) = mat;
    true
    gap> coll:= CollapsedMat( mat, [ [ 1, 1, 1, 2 ] ] );
    rec( mat := [ [ 1, 1, 1, 1 ], [ 2, -1, 0, 0 ], [ 4, 4, 1, 1 ] ], 
      fusion := [ 1, 2, 3, 4 ] )
    

  • ContainedDecomposables( constituents, moduls, parachar, func ) F
  • ContainedCharacters( tbl, constituents, parachar ) F

    Let constituents be a list of rational class functions, moduls a list of positive integers, parachar a parametrized rational class function, and func a function that returns either true or false when called with (a values list of) a class function.

    ContainedDecomposables returns the set of all elements c of parachar that satisfy func ( c) = true and that lie in the Z-lattice spanned by constituents, modulo moduls. The latter means they lie in the Z-lattice spanned by constituents and the set

    { moduls [i] ·ei; 1 £ i £ n },
    where n is the length of parachar and ei is the i-th standard basis vector.

    One application of ContainedDecomposables is the following. constituents is a list of (values lists of) rational characters of an ordinary character table tbl, moduls is the list of centralizer orders of tbl (see SizesCentralizers), and func checks whether a vector in the lattice mentioned above has nonnegative integral scalar product in tbl with all entries of constituents. This situation is handled by ContainedCharacters. Note that the entries of the result list are not necessary linear combinations of constituents, and they are not necessarily characters of tbl.

    gap> subtbl:= CharacterTable( "HSM12" );;  tbl:= CharacterTable( "HS" );;
    gap> rat:= RationalizedMat( Irr( subtbl ) );;
    gap> fus:= InitFusion( subtbl, tbl );;
    gap> rest:= CompositionMaps( Irr( tbl )[8], fus );
    [ 231, [ -9, 7 ], [ -9, 7 ], [ -9, 7 ], 6, 15, 15, [ -1, 15 ], [ -1, 15 ], 1, 
      [ 1, 6 ], [ 1, 6 ], [ 1, 6 ], [ 1, 6 ], [ -2, 0 ], [ 1, 2 ], [ 1, 2 ], 
      [ 1, 2 ], 0, 0, 1, 0, 0, 0, 0 ]
    gap> # compute all vectors in the lattice
    gap> ContainedDecomposables( rat, SizesCentralizers( subtbl ), rest,
    >        ReturnTrue );
    [ [ 231, 7, -9, -9, 6, 15, 15, -1, -1, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 
          0, 0, 0, 0 ], 
      [ 231, 7, -9, -9, 6, 15, 15, 15, 15, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 
          0, 0, 0, 0 ], 
      [ 231, 7, -9, 7, 6, 15, 15, -1, -1, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 0, 
          0, 0, 0 ], 
      [ 231, 7, -9, 7, 6, 15, 15, 15, 15, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 0, 
          0, 0, 0 ] ]
    gap> # compute only those vectors that are characters
    gap> ContainedDecomposables( rat, SizesCentralizers( subtbl ), rest,
    >        x -> NonnegIntScalarProducts( subtbl, Irr( subtbl ), x ) );
    [ [ 231, 7, -9, -9, 6, 15, 15, -1, -1, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 
          0, 0, 0, 0 ], 
      [ 231, 7, -9, 7, 6, 15, 15, -1, -1, 1, 6, 6, 1, 1, -2, 1, 2, 2, 0, 0, 1, 0, 
          0, 0, 0 ] ]
    

    [Top] [Previous] [Up] [Next] [Index]

    GAP 4 manual
    February 2000