# Element Operations

## Arithmetic

In the list of arithmetic operations below $x$ and $y$ denote class functions in the same ring, and $a$ denotes a scalar, which is any element coercible into a cyclotomic field. Also, $j$ denotes an integer.

### `+ y: AlgChtrElt -> AlgChtrElt`

### `- y: AlgChtrElt -> AlgChtrElt`

### `x + y: AlgChtrElt, AlgChtrElt -> AlgChtrElt`

### `x - y: AlgChtrElt, AlgChtrElt -> AlgChtrElt`

### `x * y: AlgChtrElt, AlgChtrElt -> AlgChtrElt`

### `a * x: FldCycElt, AlgChtrElt -> AlgChtrElt`

### `x ^ j: AlgChtrElt, RngIntElt -> AlgChtrElt`

## Predicates and Booleans

The following Boolean-valued functions are available. Note that with the exception of `in`, `notin`, `IsReal` and `IsFaithful`, these functions use the table of irreducible characters, which will be created if it is not yet available.

### `x in y: AlgChtrElt, AlgChtrElt -> BoolElt`

Returns `true` if the inner product of class functions $x$ and $y$ is non-zero, otherwise `false`. If $x$ is irreducible and $y$ is a character, this tests whether or not $x$ is a constituent of $y$.

### `x notin y: AlgChtrElt, AlgChtrElt -> BoolElt`

Returns `true` if the inner product of class functions $x$ and $y$ is zero, otherwise `false`. If $x$ is irreducible and $y$ is a character, this tests whether or not $x$ is not a constituent of $y$. Returns `true` if the character $x$ is not a constituent of the character $y$, otherwise `false`.

### `a in F: FldFunElt, FldFun -> BoolElt`

### `a notin F: FldFunElt, FldFun -> BoolElt`

### `x eq y: AlgChtrElt, AlgChtrElt -> BoolElt`

### `x ne y: AlgChtrElt, AlgChtrElt -> BoolElt`

### `IsCharacter(x): AlgChtrElt -> BoolElt`

Returns `true` if the class function $x$ is a character, otherwise `false`. A class function is a character if and only if all inner products with the irreducible characters are non-negative integers.

### `IsGeneralizedCharacter(x): AlgChtrElt -> BoolElt`

Returns `true` if the class function $x$ is a generalized character, otherwise `false`. A class function is a generalized character if and only if all inner products with the irreducible characters are integers.

### `IsIrreducible(x): AlgChtrElt -> BoolElt`

Returns `true` if the character $x$ is an irreducible character, otherwise `false`.

### `IsLinear(x): AlgChtrElt -> BoolElt`

Returns `true` if the character $x$ is a linear character, otherwise `false`.

### `IsFaithful(x): AlgChtrElt -> BoolElt`

Returns `true` if the character $x$ is faithful, i.e. has trivial kernel, otherwise `false`.

### `IsReal(x): AlgChtrElt -> BoolElt`

Returns `true` if the character $x$ is a real character, i.e. takes real values on all of the classes of $G$, otherwise `false`.

### `IsOne(x): AlgChtrElt -> BoolElt`

### `IsMinusOne(x): AlgChtrElt -> BoolElt`

### `IsZero(x): AlgChtrElt -> BoolElt`

### `IsPermutationCharacter(c): AlgChtrElt -> BoolElt`

Test if a character $c$ of $G$ is a virtual permutation character, that is ${\mathbb{C}}[X]-{\mathbb{C}}[Y]$ for some $G$-sets $X$ and $Y$. (The implementation relies on `BurnsideCokernel`, and does not compute the subgroup lattice.)

### `Example: Grp Ispermutationcharacter (ex-cd3c30)`

In a symmetric group $S_n$ every character is a virtual permutation character, but not in the quaternion group $Q_8$.

```magma
> C:=CharacterTable(Group("S5"));
> [IsPermutationCharacter(c): c in C];
[ true, true, true, true, true, true, true ]
> C:=CharacterTable(Group("Q8"));
> [IsPermutationCharacter(c): c in C];
[ true, true, true, true, false ]

```

## Accessing Class Functions

In this subsection $T$ is a character table, and $x$ is any class function. A character table is an enumerated sequence of characters that has a special print function attached. In particular, its entries can be accessed with the ordinary sequence indexing operations.

### `T[i]: TabChtr, RngIntElt -> AlgChtrElt`

Given the table $T$ of ordinary characters of $G$, return the $i$-th character of $G$, where $i$ is an integer in the range $[1...k]$.

### `T[i][j]: TabChtr, RngIntElt, RngIntElt -> FldCycElt`

The value of the $i$-th irreducible character (from the character table $T$) on the $j$-th conjugacy class of $G$.

### `# T: SeqEnum -> RngIntElt`

Given a character table $T$ (or any sequence of characters), return the number of entries.

### `x(g): AlgChtrElt, GrpElt -> FldCycElt`

### `g @ x: GrpElt, AlgChtrElt -> FldCycElt`

The value of the class function $x$ on the element $g$ of $G$.

### `x[i]: AlgChtrElt, RngIntElt -> FldCycElt`

The value of the class function $x$ on the $i$-th conjugacy class of $G$.

### `# x: AlgChtrElt -> RngIntElt`

Given a class function $x$ on $G$ return its length (which equals the number of conjugacy classes of the group $G$).

## Conjugation of Class Functions

### `x ^ g: AlgChtrElt, GrpElt -> AlgChtrElt`

Given a class function $x$ on a normal subgroup $N$ of the group $G$, and an element $g$ of $G$, construct the conjugate class function $x^g$ of $x$ which is defined as follows: $x^g(n) = x( g^{-1}ng)$, for all $n$ in $N$.

### `x ^ H: AlgChtrElt, Grp -> { AlgChtrElt }`

Given a class function $x$ on a normal subgroup $N$ of the group $G$, and a subgroup $H$ of $G$, construct the sequence of conjugates of $x$ under the action of the subgroup $H$. The action of an element of $H$ on $x$ is that defined for $x^g$.

### `GaloisConjugate(x, j): AlgChtrElt, RngIntElt -> AlgChtrElt`

Let ${\mathbb{Q}}(x)$ be the subfield of ${\mathbb{Q}(\zeta_m)}$ generated by ${\mathbb{Q}}$ and the values of the $G$-character $x$. This function returns the Galois conjugate $x^j$ of $x$ under the action of the element of the Galois group ${\operatorname{Gal}}({\mathbb{Q}}(x)/{\mathbb{Q}})$ determined by the integer $j$. The integer $j$ must be coprime to $m$.

### `GaloisOrbit(x): AlgChtrElt -> { AlgChtrElt }`

Let ${\mathbb{Q}}(x)$ be the subfield of ${\mathbb{Q}(\zeta_m)}$ generated by ${\mathbb{Q}}$ and the values of the $G$-character $x$. This function returns the sequence of Galois conjugates of $x$ under the action of the Galois group ${\operatorname{Gal}}({\mathbb{Q}}(x)/{\mathbb{Q}})$.

### `IsConjugate(x, y): AlgChtrElt, AlgChtrElt -> BoolElt, RngIntElt`

Determine if $x$ and $y$ are galois conjugate characters. Return `false` if not. If so, return `true`, and $j$ such that `GaloisConjugate(x, j)` is $y$.

### `ClassPowerCharacter(x, j): AlgChtrElt, RngIntElt -> AlgChtrElt`

Given a class function $x$ on the group $G$ and a positive integer $j$, construct the class function $x^j$ which is defined as follows: $x^j(g) = x(g^j)$.

## Functions Returning a Scalar

### `Degree(x): AlgChtrElt -> RngIntElt`

The degree of the class function $x$, i.e. the value of $x$ on the identity element of $G$.

### `InnerProduct(x, y): AlgChtrElt, AlgChtrElt -> FldCycElt`

The inner product of the class functions $x$ and $y$, where $x$ and $y$ are class functions belonging to the same character ring.

### `Order(x): AlgChtrElt -> RngIntElt`

Given a linear character of the group $G$, determine the order of $x$ as an element of the group of linear characters of $G$.

### `Norm(x): AlgChtrElt -> FldCycElt`

Norm of the class function $x$ (which is the inner product with itself).

### `Schur(x, k): AlgChtrElt, RngIntElt -> FldCycElt`

### `Indicator(x): AlgChtrElt -> FldCycElt`

Given class function $x$ and a positive integer $k$, return the generalised Frobenius–Schur indicator which is defined as follows: Suppose $g$ is some element of $G$, and set $T_k(g) = \vert\{ h\in G | h^k = g\}\vert$. The value of `Schur(x, k)` is the coefficient $a_x$ in the expression $T_k = \sum_{ x\in{\operatorname{Irr}}(G)} a_x x$.

The call `Indicator(x)` is equivalent to `Schur(x,2)`.

### `StructureConstant(G, i, j, k): Grp, RngIntElt, RngIntElt, RngIntElt -> RngIntElt`

The structure constant $a_{i,j,k}$ for the centre of the group algebra of the group $G$. If $K_i$ is the formal sum of the elements of the $i$-th conjugacy class, $a_{i,j,k}$ is defined by the equation $K_i * K_j = \sum_k a_{i,j,k} * K_k$.
