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

Check for forms in GO etc. too strict? #67

Open
fingolfin opened this issue Apr 10, 2024 · 1 comment · May be fixed by #68
Open

Check for forms in GO etc. too strict? #67

fingolfin opened this issue Apr 10, 2024 · 1 comment · May be fixed by #68

Comments

@fingolfin
Copy link
Member

From < https://math.stackexchange.com/questions/4895884>, entering

mat := IdentityMat(3,GF(7));
GO(3,7,mat);

leads to an error

Error, canonical forms of <form> and <wanted> differ.

because the quadratic forms are similar but not conjugate, i.e., they differ by a scalar.

But my understanding of the intention behind the form argument to GO etc. is that such a scalar should not matter.

This would suggest to me that we should tweak forms, specifically Forms_OrthogonalGroup, to ignore this scalar. So the check

    if Forms_RESET( mat1 * form!.matrix * TransposedMat( mat1 ) ) <>
       Forms_RESET( mat2 * stored * TransposedMat( mat2 ) ) then
      Error( "canonical forms of <form> and <wanted> differ" );
    fi;

should instead check if the two matrices are projectively equal. The recog package has a function IsEqualProjective for that which we could copy. But perhaps better would be to add a function that takes two forms (as in: high level form objects, as provided by this package) as argument and returns whether they are similar. Say IsSimilarForm(A,B). And while we are at it perhaps also IsEquivalentForm(A,B).

CC @ThomasBreuer

@ThomasBreuer
Copy link
Contributor

I understand the code of the GeneralOrthogonalGroupCons method in question as follows.
In order to switch from the default form for GO( e, d, q ) to the form prescribed by the given matrix, first base changes to "the" canonical form are applied to the two matrices in question,
then Forms_RESET standardizes the results such that the matrices are in upper diagonal form,
and then the two standardized matrices are compared.
The problem is that in general a base change can transform a given matrix to "the" canonical form only up to a scalar (one or a nonsquare).
Thus it would be enough if Forms_RESET would also standardize the first nonzero entry of the matrices to one.

Encapsulating the base changes and the standardizations into one function for checking similarity would not help because we need the base change matrices later on.
(Well, the current code actually computes them twice. I also do not understand why the default form is called wanted.)

ThomasBreuer added a commit to ThomasBreuer/forms that referenced this issue Apr 16, 2024
@ThomasBreuer ThomasBreuer linked a pull request Apr 16, 2024 that will close this issue
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 a pull request may close this issue.

2 participants