  
  [1X1 [33X[0;0YThe [5XInduceReduce[105X[101X[1X package[133X[101X
  
  
  [1X1.1 [33X[0;0YTheory[133X[101X
  
  [33X[0;0YThe  [5XInduceReduce[105X  provides  a  function for computing the table of ordinary
  irreducible  characters  of  a  finite  group  [22XG[122X using an algorithm based on
  Brauer's    theorem    on    induced    characters    (see   the   Wikipedia
  ([7Xhttps://en.wikipedia.org/wiki/Brauer%27s_theorem_on_induced_characters[107X)
  article),  which  has  been  described  by  W. Unger in [Ung06]. By Brauer's
  theorem, the ring [22XℤIrr(G)[122X of generalized characters of [22XG[122X is generated by the
  induced characters [22XInd_H^G(λ)[122X, where [22XH[122X runs over all elementary subgroups of
  [22XG[122X  and  [22Xλ[122X runs over all irreducible characters of [22XH[122X. The algorithm runs over
  suitably  chosen  elementary  subgroups  of  [22XG[122X,  computes  their irreducible
  characters  and  induces  them to [22XG[122X. In the resulting lattice of generalized
  characters,  it  searches  for  an orthonormal basis by means of LLL lattice
  reduction.  Once  an  orthonormal  basis  of  size  equal  to  the number of
  conjugacy  classes of [22XG[122X is found, it is clear from character theory that the
  elements of this basis are up to sign the irreducible characters of [22XG[122X.[133X
  
  
  [1X1.2 [33X[0;0YProgram[133X[101X
  
  [33X[0;0YUnger's   Algorithm  is  implemented  in  the  function  [2XCharacterTableUnger[102X
  ([14X1.2-1[114X).[133X
  
  [1X1.2-1 CharacterTableUnger[101X
  
  [33X[1;0Y[29X[2XCharacterTableUnger[102X( [3XG[103X[, [3XOpt[103X] ) [32X function[133X
  
  [33X[0;0YThis  function  computes the character table of a finite group using Unger's
  algorithm. The argument [3XG[103X must be a finite group, the argument [3XOpt[103X must be a
  record  which  sets  some options for the algorithm (more details in Section
  [14X1.3[114X below).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG:=AlternatingGroup(6);;[127X[104X
    [4X[25Xgap>[125X [27XCharacterTableUnger(G);[127X[104X
    [4X[28XCharacterTable( Alt( [ 1 .. 6 ] ) )[128X[104X
  [4X[32X[104X
  
  [1X1.2-2 InfoCTUnger[101X
  
  [33X[1;0Y[29X[2XInfoCTUnger[102X [32X info class[133X
  
  [33X[0;0YThe  info  class  [2XInfoCTUnger[102X makes the function [2XCharacterTableUnger[102X ([14X1.2-1[114X)
  display information about the current state of the computation, which may be
  useful  for  computations with large groups. If [2XInfoCTUnger[102X is set to [10X1[110X then
  the  function  first  displays the number of conjugacy classes of [3XG[103X and then
  shows  for  any elementary subgroup [22XE = ZP[122X whose characters are induced to [3XG[103X
  the  order of [22XZ[122X, the order of [22XP[122X and the number of conjugacy classes of [22XE[122X. If
  [2XInfoCTUnger[102X  is  set  to  [10X2[110X  then it additionally displays the orders of the
  conjugacy.  Moreover,  it shows after each LLL reduction the total number of
  irreducible  characters found so far, the dimension of the character lattice
  and the determinant of the Gram matrix.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG:=AlternatingGroup(6);;[127X[104X
    [4X[25Xgap>[125X [27XSetInfoLevel(InfoCTUnger,1);[127X[104X
    [4X[25Xgap>[125X [27XCharacterTableUnger(G);[127X[104X
    [4X[28X#I  Induce/Restrict: group with 7 conjugacy classes.[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 5, 1, 5 ][128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 4, 1, 4 ][128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 3, 1, 3 ][128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 3, 1, 3 ][128X[104X
    [4X[28XCharacterTable( Alt( [ 1 .. 6 ] ) )[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XSetInfoLevel(InfoCTUnger,2);[127X[104X
    [4X[25Xgap>[125X [27XCharacterTableUnger(G);[127X[104X
    [4X[28X#I  Induce/Restrict: group with 7 conjugacy classes.[128X[104X
    [4X[28X#I  Induce/Restrict: orders of class reps: [ 1, 2, 3, 3, 4, 5, 5 ][128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 5, 1, 5 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 1, dim = 4, det(G) = 43[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 4, 1, 4 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 1, dim = 6, det(G) = 8[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 3, 1, 3 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 2, dim = 7, det(G) = 4[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 3, 1, 3 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 7[128X[104X
    [4X[28XCharacterTable( Alt( [ 1 .. 6 ] ) )[128X[104X
  [4X[32X[104X
  
  [1X1.2-3 CTUngerDefaultOptions[101X
  
  [33X[1;0Y[29X[2XCTUngerDefaultOptions[102X [32X global variable[133X
  
  [33X[0;0YThe  global  variable  [2XCTUngerDefaultOptions[102X  contains  a  record  with four
  components  [10XDoCyclicFirst[110X,  [10XDoCyclicLast[110X, [10XLLLOffset[110X and [10XDelta[110X, which specify
  the  default  options  for  the  function  [2XCharacterTableUnger[102X  ([14X1.2-1[114X). The
  options can be changed manually by the user, for more details see Subsection
  [14X1.3-4[114X below. The initial values for the record components are as follows:[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XCTUngerDefaultOptions;[127X[104X
    [4X[28Xrec( Delta := 3/4, DoCyclicFirst := false, DoCyclicLast := false, LLLOffset := 0 )[128X[104X
  [4X[32X[104X
  
  
  [1X1.3 [33X[0;0YOptions[133X[101X
  
  [33X[0;0YIn  this  section,  we  explain  the options for [2XCharacterTableUnger[102X ([14X1.2-1[114X)
  using  the  optional  second  argument  [3XOpt[103X,  which  should be a record with
  components  [10XDoCyclicFirst[110X,  [10XDoCyclicLast[110X, [10XLLLOffset[110X and [10XDelta[110X. You only need
  to specify those components of the record that you want to manually set to a
  certain  value,  the  others  will  be  assigned  their default value by the
  program.  Additional  components of the record will be ignored. The intended
  use of the different components of [3XOpt[103X is as follows:[133X
  
  
  [1X1.3-1 [33X[0;0YDoCyclicFirst and DocyclicLast[133X[101X
  
  [33X[0;0YThe  component [10XOpt.DoCyclicFirst[110X should be a boolean which is by default set
  to  [9Xfalse[109X. It tells the function [2XCharacterTableUnger[102X ([14X1.2-1[114X) to first induce
  all  irreducible  characters  of the cyclic subgroups and then proceed to do
  the   same   for   the   non-cyclic   elementary   subgroups.   The   option
  [10XOpt.DoCyclicLast[110X  does  the  opposite, that is, it tells [2XCharacterTableUnger[102X
  ([14X1.2-1[114X)  to  first  induce  the  characters  of  the  non-cyclic  elementary
  subgroups and then proceed to induce the characters of the cyclic subgroups.
  The  default  value  is  also  [9Xfalse[109X Note that even when [10XOpt.DoCyclicLast[110X is
  [9Xtrue[109X, it may happen that some cyclic group are used by the algorithm earlier
  than  some non-cyclic elementary subgroups, but only when the group [22XP[122X in [22XE =
  ZP[122X is cyclic. When both [10XOpt.DoCyclicFirst[110X and [10XOpt.DoCyclicLast[110X are set to be
  [9Xtrue[109X then the program still induces from cyclic groups first.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XCharacterTableUnger(G,rec( DoCyclicFirst:=true ));[127X[104X
    [4X[28X#I  Induce/Restrict: group with 7 conjugacy classes.[128X[104X
    [4X[28X#I  Induce/Restrict: orders of class reps: [ 1, 2, 3, 3, 4, 5, 5 ][128X[104X
    [4X[28X#I  Induce: from cyclic subgroups[128X[104X
    [4X[28X#I  Reduce: |Irr| = 7[128X[104X
    [4X[28XCharacterTable( Alt( [ 1 .. 6 ] ) )[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XCharacterTableUnger(G,rec( DoCyclicLast:=true ));[127X[104X
    [4X[28X#I  Induce/Restrict: group with 7 conjugacy classes.[128X[104X
    [4X[28X#I  Induce/Restrict: orders of class reps: [ 1, 2, 3, 3, 4, 5, 5 ][128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 1, 5, 5 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 1, dim = 4, det(G) = 43[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 1, 8, 5 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 5, dim = 6, det(G) = 2[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 1, 9, 9 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 7[128X[104X
    [4X[28XCharacterTable( Alt( [ 1 .. 6 ] ) )[128X[104X
  [4X[32X[104X
  
  
  [1X1.3-2 [33X[0;0YLLLOffset[133X[101X
  
  [33X[0;0YThe  component  [10XOpt.LLLOffset[110X  should  be  an  integer  telling the function
  [2XCharacterTableUnger[102X ([14X1.2-1[114X) to not apply LLL reduction to the Gram matrix of
  the  character  lattice  each  time  after the characters of some elementary
  subgroup  have been induced. More precisely, the first LLL reduction will be
  carried  out  after  the  characters  of  the  first [10XOpt.LLLOffset[110Xelementary
  subgroups  have  been induced. When [10XOpt.DoCyclicFirst[110X is true then the first
  LLL  reduction will be carried out after the characters of the cyclic groups
  and  the first [10XOpt.LLLOffset[110X non-cyclic elementary groups have been induced.
  The default value for [10XOpt.LLLOffset[110X is [10X0[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XCharacterTableUnger(G,rec( LLLOffset:=3 ));[127X[104X
    [4X[28X#I  Induce/Restrict: group with 7 conjugacy classes.[128X[104X
    [4X[28X#I  Induce/Restrict: orders of class reps: [ 1, 2, 3, 3, 4, 5, 5 ][128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 5, 1, 5 ][128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 4, 1, 4 ][128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 3, 1, 3 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 2, dim = 7, det(G) = 4[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 3, 1, 3 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 7[128X[104X
    [4X[28XCharacterTable( Alt( [ 1 .. 6 ] ) )[128X[104X
  [4X[32X[104X
  
  
  [1X1.3-3 [33X[0;0YDelta[133X[101X
  
  [33X[0;0YThe  component  [10XOpt.Delta[110X can be used to specify the parameter [22Xδ[122X for the LLL
  reduction,  where  [22X1/4  <  δ ≤ 1[122X. The default value for [10XOpt.Delta[110X is [22X3/4[122X and
  [10XOpt.Delta[110X  is  ignored  if  it  is  not  a rational with [22X1/4 <[122X [10XOpt.Delta[110X and
  [10XOpt.Delta[110X [22X≤ 1[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XSetInfoLevel(InfoCTUnger,2);[127X[104X
    [4X[25Xgap>[125X [27XG:=AlternatingGroup(6);;[127X[104X
    [4X[25Xgap>[125X [27XCharacterTableUnger(G,rec( Delta:=3/10 ));[127X[104X
    [4X[28X#I  Induce/Restrict: group with 7 conjugacy classes.[128X[104X
    [4X[28X#I  Induce/Restrict: orders of class reps: [ 1, 2, 3, 3, 4, 5, 5 ][128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 5, 1, 5 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 1, dim = 4, det(G) = 43[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 4, 1, 4 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 1, dim = 6, det(G) = 8[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 3, 1, 3 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 2, dim = 7, det(G) = 4[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 3, 1, 3 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 5, dim = 7, det(G) = 1[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 1, 9, 9 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 7[128X[104X
    [4X[28XCharacterTable( Alt( [ 1 .. 6 ] ) )[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XCharacterTableUnger(G,rec( Delta:=3/10, DoCyclicLast:=true ));[127X[104X
    [4X[28X#I  Induce/Restrict: group with 7 conjugacy classes.[128X[104X
    [4X[28X#I  Induce/Restrict: orders of class reps: [ 1, 2, 3, 3, 4, 5, 5 ][128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 1, 5, 5 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 1, dim = 4, det(G) = 43[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 1, 9, 9 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 2, dim = 6, det(G) = 3[128X[104X
    [4X[28X#I  Induce/Restrict: Trying [|Z|, |P|, k(E)] = [ 1, 8, 5 ][128X[104X
    [4X[28X#I  Reduce: |Irr| = 5, dim = 7, det(G) = 1[128X[104X
    [4X[28X#I  Reduce: |Irr| = 7[128X[104X
    [4X[28XCharacterTable( Alt( [ 1 .. 6 ] ) )[128X[104X
  [4X[32X[104X
  
  
  [1X1.3-4 [33X[0;0YChanging the default options[133X[101X
  
  [33X[0;0YIn  cases  where  the character tables of several groups need to be computed
  using  the  same  options,  it  may be useful to change the default options,
  which are specified in the record [2XCTUngerDefaultOptions[102X ([14X1.2-3[114X). This can be
  done by simply overwriting the the components of that record.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XCTUngerDefaultOptions;[127X[104X
    [4X[28Xrec( Delta := 3/4, DoCyclicFirst := false, DoCyclicLast := false, LLLOffset := 0 )[128X[104X
    [4X[25Xgap>[125X [27XCTUngerDefaultOptions.Delta:=1;;[127X[104X
    [4X[25Xgap>[125X [27XCTUngerDefaultOptions.DoCyclicLast:=true;;[127X[104X
    [4X[25Xgap>[125X [27XCTUngerDefaultOptions;[127X[104X
    [4X[28Xrec( Delta := 1, DoCyclicFirst := false, DoCyclicLast := true, LLLOffset := 0 )[128X[104X
  [4X[32X[104X
  
