# Characters of Finite Groups

Assume that $G$ is a finite group of exponent $m$ with $k$ conjugacy classes of elements. The operators discussed here are concerned with the ring of *class functions on* $G$, defined to be the ring of complex-valued functions on $G$ that are constant on conjugacy classes. This ring is made into a ${\mathbb{C}}$-algebra by identifying $c\in {\mathbb{C}}$ with the constant function that is $c$ everywhere. In fact we will restrict ourselves to functions with values that are elements of cyclotomic fields. Elements of the ring, that is, objects of type `AlgChtrElt`, are represented by the $k$ values (elements of some cyclotomic field ${\mathbb{Q}}(\zeta_n)$) on the classes. The numbering of those elements matches the numbering of the classes as returned by `Classes` applied to the underlying group `G`: Thus `X[i]` is the value of the character `X` on the $i$-th class, i.e. `Classes(G)[i]`.

- [Creation Functions](creation.md)

  - [Structure Creation](creation.md#structure-creation)

    - [`ClassFunctionSpace(G): Grp → AlgChtr`](creation.md#function-classfunctionspace-grp)

    - [`CharacterRing(G): Grp → AlgChtr`](creation.md#function-characterring-grp)

    - [`ClassFunctionSpace(Q): SeqEnum → AlgChtr`](creation.md#function-classfunctionspace-seqenum)

    - [`CharacterRing(Q): SeqEnum → AlgChtr`](creation.md#function-characterring-seqenum)

  - [Element Creation](creation.md#element-creation)

    - [`elt< R | a₁, ..., aₖ :parameters>: AlgChtr, FldCycElt, ..., FldCycElt → AlgChtrElt`](creation.md#constructor-constructor-elt-algchtr-fldcycelt-fldcycelt-algchtrelt)

    - [`R ! [ a₁, ..., aₖ ]: AlgChtr, SeqEnum → AlgChtrElt`](creation.md#operation-op-algchtr-seqenum)

    - [`R ! a: AlgChtr, RngIntElt → AlgChtrElt`](creation.md#operation-op-algchtr-rngintelt)

    - [`R ! a: AlgChtr, FldRatElt → AlgChtrElt`](creation.md#operation-op-algchtr-fldratelt)

    - [`R ! a: AlgChtr, FldCycElt → AlgChtrElt`](creation.md#operation-op-algchtr-fldcycelt)

    - [`Id(R): AlgChtr → AlgChtrElt`](creation.md#function-id-algchtr)

    - [`Identity(R): AlgChtr → AlgChtrElt`](creation.md#function-identity-algchtr)

    - [`One(R): AlgChtr → AlgChtrElt`](creation.md#function-one-algchtr)

    - [`PrincipalCharacter(G): Grp → AlgChtrElt`](creation.md#function-principalcharacter-grp)

    - [`Zero(R): AlgChtr → AlgChtrElt`](creation.md#function-zero-algchtr)

- [The Table of Irreducible Characters](irreducible.md)

  - [`KnownIrreducibles(R): AlgChtr → SeqEnum`](irreducible.md#function-knownirreducibles-algchtr)

  - [`KnownIrreducibles(G): Grp → SeqEnum`](irreducible.md#function-knownirreducibles-grp)

  - [`CharacterTable(G :parameters): Grp → SeqEnum`](irreducible.md#function-charactertable-grp)

  - [`CharacterTableDS(G :parameters): Grp → SeqEnum, SeqEnum`](irreducible.md#function-charactertableds-grp)

  - [`Basis(R): AlgChtr → SeqEnum`](irreducible.md#function-basis-algchtr)

  - [`CharacterTableConlon(G): Grp → SeqEnum`](irreducible.md#function-charactertableconlon-grp)

  - [`LinearCharacters(G): Grp → SeqEnum`](irreducible.md#function-linearcharacters-grp)

  - [`CharacterDegrees(G): GrpPerm → SeqEnum`](irreducible.md#function-characterdegrees-grpperm)

  - [`CharacterDegrees(G): GrpPC → SeqEnum`](irreducible.md#function-characterdegrees-grppc)

  - [`CharacterDegrees(G): GrpMat → SeqEnum`](irreducible.md#function-characterdegrees-grpmat)

  - [`CharacterDegrees(G): GrpAb → SeqEnum`](irreducible.md#function-characterdegrees-grpab)

  - [`CharacterDegrees(G, z, p): GrpPC, GrpPCElt, RngIntElt → SeqEnum`](irreducible.md#function-characterdegrees-grppc-grppcelt-rngintelt)

  - [`CharacterDegreesPGroup(G): GrpPC → SeqEnum`](irreducible.md#function-characterdegreespgroup-grppc)

  - [`RationalCharacterTable(G): GrpFin → SeqEnum`](irreducible.md#function-rationalcharactertable-grpfin)

  - [`SaveCharacterTable(T, F): SeqEnum[AlgChtrElt], MonStgElt`](irreducible.md#function-savecharactertable-seqenum-algchtrelt-monstgelt)

  - [`Example: Character Table`](irreducible.md#example-ex-1eda96)

  - [`Example: Character Table2`](irreducible.md#example-ex-be592e)

- [Character Ring Operations](ring.md)

  - [Related Structures](ring.md#related-structures)

    - [`Parent(R): AlgChtr → Pow`](ring.md#function-parent-algchtr)

    - [`Category(R): AlgChtr → Cat`](ring.md#function-category-algchtr)

    - [`NumberOfClasses(R): AlgChtr → RngIntElt`](ring.md#function-numberofclasses-algchtr)

    - [`Nclasses(R): AlgChtr → RngIntElt`](ring.md#function-nclasses-algchtr)

    - [`ClassesData(R): AlgChtr → SeqEnum[Tup]`](ring.md#function-chtr-classesdata)

    - [`Group(R): AlgChtr → Grp`](ring.md#function-group-algchtr)

    - [`PowerMap(R): AlgChtr → Map`](ring.md#function-powermap-algchtr)

    - [`Kernel(x): AlgChtrElt → Grp`](ring.md#function-kernel-algchtrelt)

    - [`Centre(x): AlgChtrElt → Grp`](ring.md#function-centre-algchtrelt)

    - [`CoefficientField(x): AlgChtrElt → Rng`](ring.md#function-coefficientfield-algchtrelt)

    - [`CharacterField(x): AlgChtrElt → Rng`](ring.md#function-characterfield-algchtrelt)

    - [`DegreeOfCharacterField(x): AlgChtrElt → RngIntElt`](ring.md#function-degreeofcharacterfield-algchtrelt)

- [Element Operations](element.md)

  - [Arithmetic](element.md#arithmetic)

    - [`+ y: AlgChtrElt → AlgChtrElt`](element.md#operation-operation-algchtrelt-algchtrelt)

    - [`- y: AlgChtrElt → AlgChtrElt`](element.md#operation-operation-algchtrelt-algchtrelt-2)

    - [`x + y: AlgChtrElt, AlgChtrElt → AlgChtrElt`](element.md#operation-op-plus-algchtrelt-algchtrelt)

    - [`x - y: AlgChtrElt, AlgChtrElt → AlgChtrElt`](element.md#operation-op-minus-algchtrelt-algchtrelt)

    - [`x * y: AlgChtrElt, AlgChtrElt → AlgChtrElt`](element.md#operation-op-times-algchtrelt-algchtrelt)

    - [`a * x: FldCycElt, AlgChtrElt → AlgChtrElt`](element.md#operation-op-times-fldcycelt-algchtrelt)

    - [`x ^ j: AlgChtrElt, RngIntElt → AlgChtrElt`](element.md#operation-op-pow-algchtrelt-rngintelt)

  - [Predicates and Booleans](element.md#predicates-and-booleans)

    - [`x in y: AlgChtrElt, AlgChtrElt → BoolElt`](element.md#operation-op-in-algchtrelt-algchtrelt)

    - [`x notin y: AlgChtrElt, AlgChtrElt → BoolElt`](element.md#operation-op-notin-algchtrelt-algchtrelt)

    - [`a in F: FldFunElt, FldFun → BoolElt`](element.md#operation-op-in-fldfunelt-fldfun)

    - [`a notin F: FldFunElt, FldFun → BoolElt`](element.md#operation-op-notin-fldfunelt-fldfun)

    - [`x eq y: AlgChtrElt, AlgChtrElt → BoolElt`](element.md#operation-op-eq-algchtrelt-algchtrelt)

    - [`x ne y: AlgChtrElt, AlgChtrElt → BoolElt`](element.md#operation-op-ne-algchtrelt-algchtrelt)

    - [`IsCharacter(x): AlgChtrElt → BoolElt`](element.md#function-ischaracter-algchtrelt)

    - [`IsGeneralizedCharacter(x): AlgChtrElt → BoolElt`](element.md#function-isgeneralizedcharacter-algchtrelt)

    - [`IsIrreducible(x): AlgChtrElt → BoolElt`](element.md#function-isirreducible-algchtrelt)

    - [`IsLinear(x): AlgChtrElt → BoolElt`](element.md#function-islinear-algchtrelt)

    - [`IsFaithful(x): AlgChtrElt → BoolElt`](element.md#function-isfaithful-algchtrelt)

    - [`IsReal(x): AlgChtrElt → BoolElt`](element.md#function-isreal-algchtrelt)

    - [`IsOne(x): AlgChtrElt → BoolElt`](element.md#function-isone-algchtrelt)

    - [`IsMinusOne(x): AlgChtrElt → BoolElt`](element.md#function-isminusone-algchtrelt)

    - [`IsZero(x): AlgChtrElt → BoolElt`](element.md#function-iszero-algchtrelt)

    - [`IsPermutationCharacter(c): AlgChtrElt → BoolElt`](element.md#function-ispermutationcharacter-algchtrelt)

    - [`Example: Grp Ispermutationcharacter`](element.md#example-ex-cd3c30)

  - [Accessing Class Functions](element.md#accessing-class-functions)

    - [`T[i]: TabChtr, RngIntElt → AlgChtrElt`](element.md#literal-literal-t-i-tabchtr-rngintelt-algchtrelt)

    - [`T[i][j]: TabChtr, RngIntElt, RngIntElt → FldCycElt`](element.md#literal-literal-t-i-j-tabchtr-rngintelt-rngintelt-fldcycelt)

    - [`# T: SeqEnum → RngIntElt`](element.md#operation-operation-seqenum-rngintelt)

    - [`x(g): AlgChtrElt, GrpElt → FldCycElt`](element.md#literal-x-algchtrelt-grpelt)

    - [`g @ x: GrpElt, AlgChtrElt → FldCycElt`](element.md#operation-operation-grpelt-algchtrelt-fldcycelt)

    - [`x[i]: AlgChtrElt, RngIntElt → FldCycElt`](element.md#literal-literal-x-i-algchtrelt-rngintelt-fldcycelt)

    - [`# x: AlgChtrElt → RngIntElt`](element.md#operation-operation-algchtrelt-rngintelt)

  - [Conjugation of Class Functions](element.md#conjugation-of-class-functions)

    - [`x ^ g: AlgChtrElt, GrpElt → AlgChtrElt`](element.md#operation-op-pow-algchtrelt-grpelt)

    - [`x ^ H: AlgChtrElt, Grp → { AlgChtrElt }`](element.md#operation-op-pow-algchtrelt-grp)

    - [`GaloisConjugate(x, j): AlgChtrElt, RngIntElt → AlgChtrElt`](element.md#function-galoisconjugate-algchtrelt-rngintelt)

    - [`GaloisOrbit(x): AlgChtrElt → { AlgChtrElt }`](element.md#function-galoisorbit-algchtrelt)

    - [`IsConjugate(x, y): AlgChtrElt, AlgChtrElt → BoolElt, RngIntElt`](element.md#function-isconjugate-algchtrelt-algchtrelt)

    - [`ClassPowerCharacter(x, j): AlgChtrElt, RngIntElt → AlgChtrElt`](element.md#function-classpowercharacter-algchtrelt-rngintelt)

  - [Functions Returning a Scalar](element.md#functions-returning-a-scalar)

    - [`Degree(x): AlgChtrElt → RngIntElt`](element.md#function-degree-algchtrelt)

    - [`InnerProduct(x, y): AlgChtrElt, AlgChtrElt → FldCycElt`](element.md#function-innerproduct-algchtrelt-algchtrelt)

    - [`Order(x): AlgChtrElt → RngIntElt`](element.md#function-order-algchtrelt)

    - [`Norm(x): AlgChtrElt → FldCycElt`](element.md#function-norm-algchtrelt)

    - [`Schur(x, k): AlgChtrElt, RngIntElt → FldCycElt`](element.md#function-schur-algchtrelt-rngintelt)

    - [`Indicator(x): AlgChtrElt → FldCycElt`](element.md#function-indicator-algchtrelt)

    - [`StructureConstant(G, i, j, k): Grp, RngIntElt, RngIntElt, RngIntElt → RngIntElt`](element.md#function-structureconstant-grp-rngintelt-rngintelt-rngintelt)

- [The Schur Index](schur-index.md)

  - [`SchurIndex(x): AlgChtrElt → RngIntElt`](schur-index.md#function-schurindex-algchtrelt)

  - [`SchurIndex(x, Q): AlgChtrElt, FldRat → RngIntElt`](schur-index.md#function-schurindex-algchtrelt-fldrat)

  - [`SchurIndex(x, F): AlgChtrElt, FldAlg → RngIntElt`](schur-index.md#function-schurindex-algchtrelt-fldalg)

  - [`SchurIndices(x): AlgChtrElt → SeqEnum`](schur-index.md#function-schurindices-algchtrelt)

  - [`SchurIndices(x, Q): AlgChtrElt, FldRat → SeqEnum`](schur-index.md#function-schurindices-algchtrelt-fldrat)

  - [`SchurIndices(x, F): AlgChtrElt, FldAlg → SeqEnum`](schur-index.md#function-schurindices-algchtrelt-fldalg)

  - [`SchurIndices(C, s, F): FldAlg, SeqEnum, FldAlg → SeqEnum`](schur-index.md#function-schurindices-fldalg-seqenum-fldalg)

  - [`Example: Schur Index`](schur-index.md#example-ex-cbd955)

  - [`Example: Recipe For Schur Index`](schur-index.md#example-ex-ded9d7)

  - [`SchurIndexGroup(n: parameters): RngIntElt → GrpPC`](schur-index.md#function-schurindexgroup-rngintelt)

  - [`CharacterWithSchurIndex(n: parameters): RngIntElt → AlgChtrElt. GrpPC`](schur-index.md#function-characterwithschurindex-rngintelt)

  - [Attribute](schur-index.md#attribute)

    - [`AssertAttribute({x, }{"IsCharacter", b}): AlgChtrElt, MonStgElt, BoolElt`](schur-index.md#function-assertattribute-algchtrelt-monstgelt-boolelt)

- [Constructions for Characters](constructing-characters.md)

  - [Induction, Restriction and Lifting](constructing-characters.md#induction-restriction-and-lifting)

    - [`Induction(x, G): AlgChtrElt, Grp → AlgChtrElt`](constructing-characters.md#function-induction-algchtrelt-grp)

    - [`Induction(Q, G): SeqEnum[AlgChtrElt], Grp → SeqEnum[AlgChtrElt]`](constructing-characters.md#function-induction-seqenum-algchtrelt-grp)

    - [`LiftCharacter(c, f, G): AlgChtrElt, Map, Grp → AlgChtrElt`](constructing-characters.md#function-liftcharacter-algchtrelt-map-grp)

    - [`LiftCharacters(T, f, G): [AlgChtrElt], Map, Grp → AlgChtrElt`](constructing-characters.md#function-liftcharacters-algchtrelt-map-grp)

    - [`Restriction(x, H): AlgChtrElt, Grp → AlgChtrElt`](constructing-characters.md#function-restriction-algchtrelt-grp)

    - [`Restriction(Q, H): SeqEnum[AlgChtrElt], Grp → SeqEnum[AlgChtrElt]`](constructing-characters.md#function-restriction-seqenum-algchtrelt-grp)

    - [`SubgroupFusion(G, H): Grp, Grp → SeqEnum[RngIntElt]`](constructing-characters.md#function-subgroupfusion-grp-grp)

  - [Symmetrization](constructing-characters.md#symmetrization)

    - [`Symmetrization(chi, p): AlgChtrElt, [ RngIntElt ] → AlgChtrElt`](constructing-characters.md#function-symmetrization-algchtrelt-rngintelt)

    - [`OrthogonalSymmetrization(chi, p): AlgChtrElt, [ RngIntElt ] → AlgChtrElt`](constructing-characters.md#function-orthogonalsymmetrization-algchtrelt-rngintelt)

    - [`SymplecticSymmetrization(chi, p): AlgChtrElt, [ RngIntElt ] → AlgChtrElt`](constructing-characters.md#function-symplecticsymmetrization-algchtrelt-rngintelt)

    - [`Example: Tensprod Check`](constructing-characters.md#example-ex-870f58)

    - [`Example: Symp And Orthog`](constructing-characters.md#example-ex-04434a)

    - [`IsOrthogonalCharacter(chi): AlgChtrElt → BoolElt`](constructing-characters.md#function-isorthogonalcharacter-algchtrelt)

    - [`IsSymplecticCharacter(chi): AlgChtrElt → BoolElt`](constructing-characters.md#function-issymplecticcharacter-algchtrelt)

  - [Permutation Character](constructing-characters.md#permutation-character)

    - [`PermutationCharacter(G): GrpPerm → AlgChtrElt`](constructing-characters.md#function-permutationcharacter-grpperm)

    - [`PermutationCharacter(G, H): Grp, Grp → AlgChtrElt`](constructing-characters.md#function-permutationcharacter-grp-grp)

  - [Composition and Decomposition](constructing-characters.md#composition-and-decomposition)

    - [`Composition(T, q): [ AlgChtrElt ], [RngElt] → AlgChtrElt`](constructing-characters.md#function-composition-algchtrelt-rngelt)

    - [`Decomposition(T, y): [AlgChtrElt], AlgChtrElt → [ FldCycElt ], AlgChtrElt`](constructing-characters.md#function-decomposition-algchtrelt-algchtrelt)

  - [Finding Irreducibles](constructing-characters.md#finding-irreducibles)

    - [`RemoveIrreducibles(I, C): [ AlgChtrElt ], [ AlgChtrElt ] → [ AlgChtrElt ], [ AlgChtrElt ]`](constructing-characters.md#function-removeirreducibles-algchtrelt-algchtrelt)

    - [`ReduceCharacters(I, C): [ AlgChtrElt ], [ AlgChtrElt ] → [ AlgChtrElt ], [ AlgChtrElt ]`](constructing-characters.md#function-reducecharacters-algchtrelt-algchtrelt)

    - [`Example: A5`](constructing-characters.md#example-ex-51853a)

- [Brauer Characters](brauer-characters.md)

  - [Structure Creation](brauer-characters.md#structure-creation)

    - [`CharacterRing(G, p): Grp, RngIntElt → AlgChtr`](brauer-characters.md#function-characterring-grp-rngintelt)

    - [`CharacterRing(R, p): AlgChtr, RngIntElt → AlgChtr`](brauer-characters.md#function-characterring-algchtr-rngintelt)

    - [`BrauerCharacteristic(R): AlgChtr → RngIntElt`](brauer-characters.md#function-brauercharacteristic-algchtr)

  - [Element Creation](brauer-characters.md#element-creation)

    - [`R ! [ a₁, ..., aₖ ]: AlgChtr, SeqEnum → AlgChtrElt`](brauer-characters.md#operation-op-algchtr-seqenum-2)

    - [`Id(R): AlgChtr → AlgChtrElt`](brauer-characters.md#function-id-algchtr-2)

    - [`Identity(R): AlgChtr → AlgChtrElt`](brauer-characters.md#function-identity-algchtr-2)

    - [`One(R): AlgChtr → AlgChtrElt`](brauer-characters.md#function-one-algchtr-2)

    - [`Zero(R): AlgChtr → AlgChtrElt`](brauer-characters.md#function-zero-algchtr-2)

    - [`BrauerCharacter(x, p): AlgChtrElt, RngIntElt → AlgChtrElt`](brauer-characters.md#function-brauercharacter-algchtrelt-rngintelt)

    - [`BrauerCharacter(M): ModGrp → AlgChtrElt`](brauer-characters.md#function-brauercharacter-modgrp)

    - [`BrauerCharacterTable(G, p): Chtr → SeqEnum`](brauer-characters.md#function-brauercharactertable-chtr)

  - [Arithmetic](brauer-characters.md#arithmetic)

    - [`+ y: AlgChtrElt → AlgChtrElt`](brauer-characters.md#operation-operation-algchtrelt-algchtrelt)

    - [`- y: AlgChtrElt → AlgChtrElt`](brauer-characters.md#operation-operation-algchtrelt-algchtrelt-2)

    - [`x + y: AlgChtrElt, AlgChtrElt → AlgChtrElt`](brauer-characters.md#operation-op-plus-algchtrelt-algchtrelt-2)

    - [`x - y: AlgChtrElt, AlgChtrElt → AlgChtrElt`](brauer-characters.md#operation-op-minus-algchtrelt-algchtrelt-2)

    - [`x * y: AlgChtrElt, AlgChtrElt → AlgChtrElt`](brauer-characters.md#operation-op-times-algchtrelt-algchtrelt-2)

    - [`a * x: FldCycElt, AlgChtrElt → AlgChtrElt`](brauer-characters.md#operation-op-times-fldcycelt-algchtrelt-2)

    - [`x ^ j: AlgChtrElt, RngIntElt → AlgChtrElt`](brauer-characters.md#operation-op-pow-algchtrelt-rngintelt-2)

  - [Induction, Restriction and Lifting](brauer-characters.md#induction-restriction-and-lifting)

    - [`Induction(x, G): AlgChtrElt, Grp → AlgChtrElt`](brauer-characters.md#function-induction-algchtrelt-grp-2)

    - [`Induction(Q, G): SeqEnum[AlgChtrElt], Grp → SeqEnum[AlgChtrElt]`](brauer-characters.md#function-induction-seqenum-algchtrelt-grp-2)

    - [`LiftCharacter(c, f, G): AlgChtrElt, Map, Grp → AlgChtrElt`](brauer-characters.md#function-liftcharacter-algchtrelt-map-grp-2)

    - [`LiftCharacters(T, f, G): [AlgChtrElt], Map, Grp → AlgChtrElt`](brauer-characters.md#function-liftcharacters-algchtrelt-map-grp-2)

    - [`Restriction(x, H): AlgChtrElt, Grp → AlgChtrElt`](brauer-characters.md#function-restriction-algchtrelt-grp-2)

    - [`Restriction(Q, H): SeqEnum[AlgChtrElt], Grp → SeqEnum[AlgChtrElt]`](brauer-characters.md#function-restriction-seqenum-algchtrelt-grp-2)

    - [`Blocks(T, p): SeqEnum[AlgChtrElt], RngIntElt → SeqEnum, SeqEnum`](brauer-characters.md#function-blocks-seqenum-algchtrelt-rngintelt)

    - [`DefectGroup(T, b, p): SeqEnum[AlgChtrElt], SetEnum[RngIntElt], RngIntElt → Grp`](brauer-characters.md#function-defectgroup-seqenum-algchtrelt-setenum-rngintelt-rngintelt)

    - [`DefectGroup(x, p): AlgChtrElt, RngIntElt → Grp`](brauer-characters.md#function-defectgroup-algchtrelt-rngintelt)

    - [`Example: brauer`](brauer-characters.md#example-ex-ae1049)

- [Database of Character Tables](ring-2.md)

  - [`CharacterTable(N): MonStgElt → SeqEnum[AlgChtrElt]`](ring-2.md#function-charactertable-monstgelt)

  - [`CharacterTable(A): GrpAtlas → SeqEnum[AlgChtrElt]`](ring-2.md#function-charactertable-grpatlas)

  - [`HasCharacterTable(A): GrpAtlas → BoolElt`](ring-2.md#function-hascharactertable-grpatlas)

  - [`CharacterTableNames() → SetIndx[MonStElt]`](ring-2.md#function-charactertablenames)

  - [`Example: Character Table Data`](ring-2.md#example-ex-7566cf)

  - [`Example: Lyons Schur Index`](ring-2.md#example-ex-4c43a0)
