# Criteria for computing orthogonal discriminants

## Direct methods

od_from_atlas_groupFunction
od_from_atlas_group(chi::GAPGroupClassFunction)

Return (flag, val) where flag is true if the function can compute the orthogonal discriminant of chi. In this case, val is a string that describes the orthogonal discriminant of chi.

Otherwise flag is false and val is "".

The former case happens if chi is absolutely irreducible, has even degree and indicator +, and the Atlas of Group Representations contains a representation affording chi, over the character field of chi or (in odd characteristic) a suitable extension field.

If the characteristic of chi is $2$ then we know no better method than calling orthogonal_sign. Otherwise we try to find an invertible skew-symmetric endomorphism w.r.t. the invariant bilinear form of the representation, with random methods.

julia> t = character_table("A6");

julia> Oscar.OrthogonalDiscriminants.od_from_atlas_group(t[7])
(true, "-1")

julia> Oscar.OrthogonalDiscriminants.od_from_atlas_group(mod(t, 3)[4])
(true, "O-")

julia> t = character_table("L2(27)");

julia> Oscar.OrthogonalDiscriminants.od_from_atlas_group(t[4])
(false, "")
source

## Character-theoretical criteria

od_from_orderFunction
od_from_order(chi::GAPGroupClassFunction)

Return (flag, val) where flag is true if the order of the group of chi divides only one of the orders of the two orthogonal groups omega_group(+/-1, d, q), where d is the degree of chi and q is the order of the field of definition of chi.

In this case, val is "O+" or "O-".

julia> t = character_table("L3(2)");

julia> Oscar.OrthogonalDiscriminants.od_from_order(mod(t, 3)[4])
(true, "O-")

julia> Oscar.OrthogonalDiscriminants.od_from_order(mod(t, 2)[4])
(false, "")
source
od_from_eigenvaluesFunction
od_from_eigenvalues(chi::GAPGroupClassFunction)

Return (flag, val) where flag is true if there is a conjugacy class on which representing matrices for chi have no eigenvalue $\pm 1$. In this case, if chi is orthogonally stable (this is not checked here) then val is a string that describes the orthogonal discriminant of chi.

If flag is false then val is equal to "".

This criterion works only if the characteristic of chi is not $2$, (false, "") is returned if the characteristic is $2$.

Examples

julia> t = character_table("A5");

julia> Oscar.OrthogonalDiscriminants.od_from_eigenvalues(t[4])
(true, "5")

julia> Oscar.OrthogonalDiscriminants.od_from_eigenvalues(mod(t, 3)[4])
(true, "O-")

julia> Oscar.OrthogonalDiscriminants.od_from_eigenvalues(mod(t, 2)[4])
(false, "")
source
od_for_specht_moduleFunction
od_for_specht_module(chi::GAPGroupClassFunction)

Return (flag, val) where flag is true if chi is an ordinary irreducible character of a symmetric group or of an alternating group such that chi extends to the corresponding symmetric group. In this case, if chi is orthogonally stable (this is not checked here) then val is a string that describes the orthogonal discriminant of chi; the discriminant is computed using the Jantzen-Schaper formula, via gram_determinant_specht_module.

(false, "") is returned in all cases where this criterion is not applicable.

Examples

julia> t = character_table("A5");

julia> Oscar.OrthogonalDiscriminants.od_for_specht_module(t[4])
(true, "5")

julia> Oscar.OrthogonalDiscriminants.od_for_specht_module(mod(t, 3)[4])
(false, "")
source
od_from_p_subgroupMethod
od_from_p_subgroup(chi::GAPGroupClassFunction, p::Int[, pi::GAPGroupClassFunction])

Let chi be an irreducible (ordinary or Brauer) character of the group $G$, and p be an odd prime integer.

Return (flag, val) where flag is true if and only if enough information can be computed to prove that the restriction of chi to a Sylow p-subgroup $P$ is orthogonally stable. In this case, val is a string that describes the orthogonal discriminant of chi.

If flag is false then val is equal to "".

If a character is given as the optional argument pi then it is assumed that pi is the permutation character of $G$ induced from $P$. Otherwise the function tries to compute the possible permutation characters.

Examples

julia> t = character_table("A5");

julia> Oscar.OrthogonalDiscriminants.od_from_p_subgroup(t[4], 5)
(true, "5")

julia> Oscar.OrthogonalDiscriminants.od_from_p_subgroup(mod(t, 3)[4], 5)
(true, "O-")

julia> Oscar.OrthogonalDiscriminants.od_from_p_subgroup(mod(t, 2)[4], 5)
(true, "O-")
source