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

Include pointers in docstring #26

Closed
2 tasks
blegat opened this issue Feb 23, 2021 · 5 comments
Closed
2 tasks

Include pointers in docstring #26

blegat opened this issue Feb 23, 2021 · 5 comments

Comments

@blegat
Copy link
Collaborator

blegat commented Feb 23, 2021

It would be helpful to give pointers to references with more details on the algorithms used in this package.
For instance, in the docstrings of

  • isotypical_basis
  • matrix_projection
@kalmarek
Copy link
Owner

kalmarek commented Feb 23, 2021

I don't think there's much to add here. There aren't really any advanced algorithms involved, it's all "simple" representation theory of groups ;)

If π: G → GL(n,K) is a matrix representation, then this homomorphism has canonical extension to a homomorphism of group algebra into the algebra M(n,n,K) of matrices over K. The matrix_projection (probably not a great name) is just realization of this extension. If χ:G → K is a function on the group (e.g. a character) (often written as Σ χ(g)·g), then matrix_projection is just Σ χ(g)·π(g), a weighted sum of matrices. Since every character is an idempotent in the group algebra, matrix_projection is a projection (e.g. in the sense of linear algebra) in the fixed basis.
Character (as an idempotent) and matrix_projection (as matrix) play the same game as quadratic form and its matrix realization in classical linear algebra.

isotypical_basis just finds a maximal set of independent vectors in the image of a projection. One could use rref for this, or SVD as I did here:
https://github.com/kalmarek/PropertyT.jl/blob/db044301059cecc3dfe7aa22325aa39e4109b981/src/blockdecomposition.jl#L28
Isotypical refers to the fact that a representation may decompose into constitutents (~irreducible summands) with multiplicities (so called isotypical decomposition). The returned basis is a basis for the whole block of such type.
Since characters (in the group algebra) are orthogonal, in the sense of this dot:

function LinearAlgebra.dot(

(which is just a specialization of a general dot on the group algebra), the derived matrix projections are orthogonal (i.e. their images are orthogonal subspaces), so combining/concatenating their images gives you blocks of orthogonality.

@kalmarek
Copy link
Owner

Probably at a later stage we may opt to provide more thorough explanation in e.g. a case-study documentation as you do here:
https://jump.dev/SumOfSquares.jl/latest/generated/Symmetry%20reduction/

??

@blegat
Copy link
Collaborator Author

blegat commented Feb 24, 2021

Thanks for the details!
So the primitive central idempotents of CG are e_i = χ_i(1)/|G| * sum_g χ_i(inv(g)) * g where χ_i are the characters of the irreps.
We drop the χ_i(1)/|G| as it's just constant and we compute instead sum_g χ_i(g) * inv(g). The regular representation of inv(g) is the matrix with i^g in each row i which gives

for (val, cc) in zip(vals, ccls)
for g in cc
for i = 1:dim
result[i, i^g] += val
end
end
end

since val is χ_i(g), correct ?

Probably at a later stage we may opt to provide more thorough explanation in e.g. a case-study documentation

Yes, it's a good idea. I do something similar in https://jump.dev/SumOfSquares.jl/latest/generated/Polynomial%20Optimization/#A-deeper-look-into-atom-extraction.

@kalmarek
Copy link
Owner

kalmarek commented Feb 24, 2021

that's correct, with a small amendment, that it's not the regular representation (group acting by left/right multiplication on itself), but the representation given by the action of the group on the basis.

In our case we have π:G → GL(basis) and to obtain projections for central idempotents (~characters) one need to evaluate the action matrix for each element g∈G. (yes, I forgot about g⁻¹ above).

For matrix groups precisely this function needs to be extended.

EDIT:
We actually don't drop this χ_i(1)/|G| factor. it is computed here

return U, T(deg) / ordG
and applied to the projection here:

@blegat
Copy link
Collaborator Author

blegat commented Mar 15, 2021

Thanks, that clarifies it :)

@blegat blegat closed this as completed Mar 15, 2021
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

No branches or pull requests

2 participants