Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions M2/Macaulay2/packages/A1BrouwerDegrees.m2
Original file line number Diff line number Diff line change
Expand Up @@ -938,3 +938,25 @@ twoH = makeDiagonalForm(QQ, (1, -1, 1, -1));
aTwoH = getAnisotropicPart twoH;
assert(getRank aTwoH == 0);
///

-- Test 48 getAnisotropicPart for a form whose anisotropy is driven by the real place
TEST ///
beta = makeDiagonalForm(QQ, (-1, -1, -1, -1, -1, 1));
a = getAnisotropicPart beta;
assert(getRank a == getAnisotropicDimension beta);
assert(isAnisotropic a);
assert(isIsomorphicForm(a, makeDiagonalForm(QQ, (-1, -1, -1, -1))));
assert(isIsomorphicForm(beta, addGW(a, makeHyperbolicForm(QQ, 2*getWittIndex beta))));
///

-- Test 49 getAnisotropicPart satisfies the Witt decomposition identity for either sign of the signature
TEST ///
for D in {(-1, -1, -1, -1, 1), (-2, -3, -5, -7, -11, 1),
(2, 3, 5, 7, 11, -1), (-1, -1, 2, 3, -5, 30)} do (
diagForm = makeDiagonalForm(QQ, D);
anisoPart = getAnisotropicPart diagForm;
assert(getRank anisoPart == getAnisotropicDimension diagForm);
assert(isAnisotropic anisoPart);
assert(isIsomorphicForm(diagForm, addGW(anisoPart, makeHyperbolicForm(QQ, 2*getWittIndex diagForm))));
);
///
8 changes: 8 additions & 0 deletions M2/Macaulay2/packages/A1BrouwerDegrees/Code/Decomposition.m2
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,14 @@ reduceAnisotropicPartQQDimension3 GrothendieckWittClass := GrothendieckWittClass
-- We are looking for an element which is equivalent to (d - 1) mod p for each p in L1 and equivalent to p mod p^2 for each p in L2
-- We use the solveCongruenceList method to find such an element
alpha := solveCongruenceList(S1 | S2, L1 | L2);

-- The congruences determine alpha only up to multiples of the product of the moduli,
-- and the real place fixes its sign: for signature -3 (resp. 3) the real anisotropic
-- part is negative (resp. positive) definite, so alpha must be negative (resp. positive)
M := product(L1 | L2);
if getSignature(beta) == -3 and alpha > 0 then alpha = (alpha % M) - M;
if getSignature(beta) == 3 and alpha < 0 then alpha = (alpha % M) + M;

a := getSquarefreePart alpha;
makeDiagonalForm(QQ, a)
)
Expand Down
Loading