Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

double the quaternionic characters in affordable_real #84

Closed
wants to merge 4 commits into from

Conversation

kneshat
Copy link

@kneshat kneshat commented Jul 10, 2024

Adding example that contains tall three possibilities(real, complex, and quaternion-type)
Distinguishing the constructions of characters for real-type and quaternion-type irreps

kneshat added 4 commits July 9, 2024 06:50
Adding an example to illustrate how real irreps are constructed from complex ones in the three different cases of FS=1, 0, and -1.
Distinguishing the construction of real-type and quaternion-type real characters.
@kalmarek kalmarek changed the title Kneshat patch 1 double the quaternionic characters in affordable_real Jul 10, 2024
@kalmarek
Copy link
Owner

Thanks!

It'd be better indeed to have this example as a test case (so in ./test directory), where instead of printing and eye-balling the result we write @tests. In this case one could

  1. Check that the quaternionic character is really doubled by affordable real
  2. compute the dimension of the image of the corresponding projection and check it is as expected.

you could end up as a separate @testset in e.g. ./test/projections.jl

@kneshat
Copy link
Author

kneshat commented Jul 10, 2024

Don't you want that test to be in ./test/sa_basis.jl? I can use SL(2,3) instead of $C_2 \oplus C_5$ since SL(2,3) has all three possibilities. What do you think?
How can I use SmallPermGroups for SL(2,3)? What number should I put instead of the question mark in SmallPermGroups[24][?]

@kneshat
Copy link
Author

kneshat commented Jul 11, 2024

There is an issue I want to address. I cannot use charsR, _ = SymbolicWedderburn.affordable_real(chars) and I get the error: InexactError: Int64(0.5). This is because I divide the multiplicity by 2 for the quaternionic irreps here: push!(mls_real, multiplicities[i]/2). If we have a real representation, the number of times that a complex irrep with FS indicator -1 occurs is an even number. It cannot be an odd number. This concept is very similar to say when we have a real representation, if an complex irrep with FS indicator 0 occurs, the conjugate of this irrep must occur.

Let $V$ be a REAL representation. If $W$ is a complex irrep with FS indicator -1 that occurs $2k$ times in $V$, then $W^{\mathbb{R}}$, where $W^{\mathbb{R}} \otimes_{\mathbb{R}} \mathbb{C} = W \oplus W$, is a quaternion-type real representation that occurs $k$ times in $V$. Now, would you tell me how we need to proceed?

@kalmarek
Copy link
Owner

maybe the solution is to remove the default value of multiplicities from affordable_real and assert that the the entry corresponding to a irrep of quaternionic type iseven?
After the assertion we can safely use div (the integer division) to compute the resulting multiplicity.

@kneshat
Copy link
Author

kneshat commented Jul 18, 2024

Do you mean

function affordable_real(
    irreducible_characters,
    multiplicities,
)
    irr_real = similar(irreducible_characters, 0)
    mls_real = similar(multiplicities, 0)
    for (i, χ) in pairs(irreducible_characters)
        ι = Characters.frobenius_schur(χ)
        if ι == 1 # real
            @debug "real" χ
            push!(irr_real, χ)
            push!(mls_real, multiplicities[i])
        elseif ι == -1 # quaternionic
            @debug "quaternionic" χ
            @assert iseven(multiplicities[i]) "Multiplicities of quaternionic character must be even."
            push!(irr_real, 2 * χ)
            push!(mls_real, div(multiplicities[i], 2))
        else # complex
            cχ = conj(χ)
            k = findfirst(==(cχ), irreducible_characters)
            @assert k !== nothing "Conjugate character not found."
            @debug "complex" χ "conj(χ) =" irreducible_characters[k]
            if k > i # we haven't already observed a conjugate
                @assert multiplicities[i] == multiplicities[k] "Multiplicities of complex conjugates must be equal."
                push!(irr_real, χ + cχ)
                push!(mls_real, multiplicities[i])
            end
        end
    end

    return irr_real, mls_real
end

??
We access characters as follows

G = SmallPermGroups[10][2] # C₂⊕C₅
tbl = SymbolicWedderburn.CharacterTable(Rational{Int}, G)
chars = SymbolicWedderburn.irreducible_characters(tbl)

Now, how can I access multiplicities of irreps so that I can run SymbolicWedderburn.affordable_real(chars,multiplicities) ?

@kalmarek
Copy link
Owner

kalmarek commented Jul 19, 2024

Yes, something like this. It would be easier to discuss, if you directly commit here, as then the review comments could be attached directly to code lines.

as for the use of affordable_real, search this repository or grep the test folder ;)

For the multiplicities basically construct your own representation that you want to realify by passing to affordable_real. Then its character decomposes into irreducibles with some multiplicities which you need to pass here.
E.g. if the character of the representation is 2χ₁ + 3χ₂ + 1χ₄, then the args will be [χ₁, χ₂, χ₄] and [2, 3, 1].

@kneshat
Copy link
Author

kneshat commented Jul 19, 2024

I see. In case you were wondering why I asked this question, I had a stupid misunderstanding. I thought the multiplicity of each character was stored in the character table in addition to its value, and if there is no representation, then the predefined multiplicity is 1. That is why I thought I could access the multiplicities using the character table. The source of this wrong preassumption is that I thought there were two numbers in each entry of the character table:a\ \ b. But now, I know a\ \ b is just the representation of 1 rational number but not two different numbers.

Anyhow, I am thinking in the cases that our representation is not realizable over real numbers, Julia returns something like "This representation is not realizable over real numbers either because there is an irrep with Schur index 0 without its conjugate or because there is an odd number of irrep with Schur index -1" instead of arbitrary error. Would you suggest how can I do that?

@kalmarek
Copy link
Owner

yes, sounds good to me, just modify the corresponding lines with @asserts, or replace them with throwing those errors

Copy link

codecov bot commented Jul 22, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 87.94%. Comparing base (8f64019) to head (5b25731).
Report is 35 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master      #84      +/-   ##
==========================================
- Coverage   90.74%   87.94%   -2.80%     
==========================================
  Files          23       22       -1     
  Lines        1329     1228     -101     
==========================================
- Hits         1206     1080     -126     
- Misses        123      148      +25     
Flag Coverage Δ
unittests 87.94% <100.00%> (-2.80%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@kneshat kneshat closed this Jul 25, 2024
@kneshat kneshat deleted the kneshat-patch-1 branch July 25, 2024 06:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants