############## ####################################################### # this is example 4.5.4 in the book ###################################################################### Read("syl.gap"); Read("isinspan.gap"); Read("subs.gap"); ###################################################################### ct := CharacterTable( "J1" );; bl := PrimeBlocks( ct, 2 );; irrB := Positions( bl.block, 1 ); ###################################################################### basm:=[1,6,7,8,12];;rest := Difference([1..Length(Irr(ct))],basm);; sb := Irr(ct){basm};; def0 := List( Positions(bl.defect,0), i -> Position(bl.block,i) ); proj := Irr(ct){ def0 };; Add( proj , Sum( Irr(ct){[4,5]} ) ); ###################################################################### Maxes(ct); for max in Maxes(ct) do ctu := CharacterTable( max) ; d := DecompositionMatrix(ctu mod 2);; pimsmax := TransposedMat(d)*Irr(ctu);; Append( proj, InducedClassFunctions( pimsmax, ct ) ); od; proj := Set(proj);; Length(proj); ###################################################################### tens := Tensored( Irr(ct), proj );; otherblocks := Difference( [1..Length(Irr(ct))] , irrB ); projectives := Reduced( ct,Irr(ct){otherblocks}, tens ).remainders;; Length( projectives ); ###################################################################### SortParallel( List(projectives, Norm), projectives ); smallpro := projectives{[1..9]};; 5sets := Filtered( Combinations(smallpro), x -> Length(x) = 5 );; basicsets := Filtered( 5sets , x -> Determinant(MatScalarProducts(ct,sb,x)) in [-1,1] );; Length( basicsets ); ###################################################################### SortParallel( List( basicsets,s -> Sum(List(s,Norm)) ), basicsets ); A := MatScalarProducts( ct, Irr(ct){irrB}, basicsets[1] );; ###################################################################### li := [];; for sp in basicsets do A1 := MatScalarProducts( ct, Irr(ct){irrB}, sp ); A1 := Filtered( A1 , x -> x[1] > 0); ss := Intersection( List(A1 , y -> subs(ct,basm,y,irrB,2)) );; ss := Filtered( ss, y -> y[1] = 1 ); Add( li, ss ); od; c1 := Intersection(li); ###################################################################### cand := [];; for x1 in c1 do a := ShallowCopy(A); a{[1,2,3]}:= [ a[1]-x1, a[2]-x1, a[3]-x1 ]; for x2 in Filtered( subs(ct,basm,a[1],irrB,2), x -> x[2] > 0 ) do y2 := First( a, x -> not isinspan( x, [x2]) ); for x3 in subs( ct,basm,y2,irrB,2 ) do y3 := First( a , x -> not isinspan( x, [x2,x3] ) ); for x4 in subs( ct,basm,y3,irrB,2 ) do y4 := First( a , x -> not isinspan(x, [x2,x3,x4]) ); for x5 in subs( ct,basm,y4,irrB,2 ) do u := [ x1, x2, x3, x4, x5 ]; u1 := TransposedMat(u){[1..5]}; if Rank(u) = 5 and Determinant(u1) in [1,-1] then m := MatScalarProducts( ct, u1^-1 * sb, smallpro ); if ForAll( m, y -> ForAll(y, x-> x >=0 and IsInt(x) )) then Add( cand, u ); fi; fi; od; od; od; od; od; for mat in cand do Sort(mat); od; cand:= Set( cand );; cand := List(cand, Reversed);; Length( cand );