You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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).
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.)
From < https://math.stackexchange.com/questions/4895884>, entering
leads to an error
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 toGO
etc. is that such a scalar should not matter.This would suggest to me that we should tweak
forms
, specificallyForms_OrthogonalGroup
, to ignore this scalar. So the checkshould instead check if the two matrices are projectively equal. The
recog
package has a functionIsEqualProjective
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. SayIsSimilarForm(A,B)
. And while we are at it perhaps alsoIsEquivalentForm(A,B)
.CC @ThomasBreuer
The text was updated successfully, but these errors were encountered: