Macaulay2 » Documentation
Packages » A1BrouwerDegrees :: A1BrouwerDegrees
next | previous | forward | backward | up | index | toc

A1BrouwerDegrees -- package for working with A1-Brouwer degree computations

Description

This package is intended to allow the computation and manipulation of local and global $\mathbb{A}^1$-Brouwer degrees. Global Brouwer degrees are non-degenerate symmetric bilinear forms valued in the Grothendieck-Witt ring of a field $\text{GW}(k)$.

In order to simplify the forms produced, this package produces invariants of symmetric bilinear forms, including their Witt indices, their discriminants, and their Hasse-Witt invariants. Quadratic forms can be decomposed into their isotropic and anisotropic parts. Finally, and perhaps most crucially, we can certify whether two symmetric bilinear forms are isomorphic in the Grothendieck-Witt ring.

Below is an example using the methods provided by this package to compute the local and global $\mathbb{A}^1$-Brouwer degrees for an endomorphism $\mathbb{A}_{\mathbb{Q}}^1\rightarrow \mathbb{A}_{\mathbb{Q}}^1.$ defined by $$ f(x)=(x^2+x+1)(x-3)(x+2).$$ We first compute the global degree.

i1 : R = QQ[x]

o1 = R

o1 : PolynomialRing
i2 : f = {x^4 - 6*x^2 - 7*x - 6}

       4     2
o2 = {x  - 6x  - 7x - 6}

o2 : List
i3 : alpha = getGlobalA1Degree f

o3 = | -7 -6 0 1 |
     | -6 0  1 0 |
     | 0  1  0 0 |
     | 1  0  0 0 |

o3 : GrothendieckWittClass
i4 : beta = getSumDecomposition alpha

o4 = | 1 0  0 0  |
     | 0 -1 0 0  |
     | 0 0  1 0  |
     | 0 0  0 -1 |

o4 : GrothendieckWittClass

We can also compute the local degrees at the respective ideals.

i5 : I1 = ideal(x^2 + x + 1);

o5 : Ideal of R
i6 : alpha1 = getLocalA1Degree(f, I1)

o6 = | -5 -7 |
     | -7 -2 |

o6 : GrothendieckWittClass
i7 : I2 = ideal(x - 3)

o7 = ideal(x - 3)

o7 : Ideal of R
i8 : alpha2 = getLocalA1Degree(f, I2)

o8 = | 65 |

o8 : GrothendieckWittClass
i9 : I3 = ideal(x + 2);

o9 : Ideal of R
i10 : alpha3 = getLocalA1Degree(f, I3)

o10 = | -15 |

o10 : GrothendieckWittClass

We can then use the isIsomorphicForm method to verify that the local degrees sum to the global degree.

i11 : alpha' = addGW(alpha1, addGW(alpha2, alpha3))

o11 = | -5 -7 0  0   |
      | -7 -2 0  0   |
      | 0  0  65 0   |
      | 0  0  0  -15 |

o11 : GrothendieckWittClass
i12 : isIsomorphicForm(alpha,alpha')

o12 = true
i13 : beta' = getSumDecomposition alpha'

o13 = | 1 0  0 0  |
      | 0 -1 0 0  |
      | 0 0  1 0  |
      | 0 0  0 -1 |

o13 : GrothendieckWittClass

Authors

Certification a gold star

Version 1.1 of this package was accepted for publication in volume 14 of Journal of Software for Algebra and Geometry on 2024-08-07, in the article $\mathbb{A}^1$-Brouwer degrees in Macaulay2 (DOI: 10.2140/jsag.2024.14.175). That version can be obtained from the journal or from the Macaulay2 source code repository.

Version

This documentation describes version 1.1 of A1BrouwerDegrees.

Source code

The source code from which this documentation is derived is in the file A1BrouwerDegrees.m2. The auxiliary files accompanying it are in the directory A1BrouwerDegrees/.

Exports

  • Types
    • GrothendieckWittClass -- a new type, intended to capture the isomorphism class of an element of the Grothendieck-Witt ring of a base field
  • Functions and commands
    • addGW -- the direct sum of two Grothendieck-Witt classes
    • diagonalizeViaCongruence -- diagonalizes a symmetric matrix via congruence
    • getAnisotropicDimension -- returns the anisotropic dimension of a symmetric bilinear form
    • getAnisotropicDimensionQQp -- returns the anisotropic dimension of a rational symmetric bilinear form over the p-adic rational numbers
    • getAnisotropicPart -- returns the anisotropic part of a Grothendieck-Witt class
    • getBaseField -- the base field of a Grothendieck-Witt class
    • getDiagonalClass -- produces a diagonalized form for any Grothendieck-Witt class, with simplified terms on the diagonal
    • getDiagonalEntries -- extracts a list of diagonal entries for a GrothendieckWittClass
    • getGlobalA1Degree -- computes the global A1-Brouwer degree of a list of n polynomials in n variables over a field k
    • getHasseWittInvariant -- computes the Hasse-Witt invariant at a prime p for the quadratic form of the Grothendieck-Witt class
    • getHilbertSymbol -- computes the Hilbert symbol of two rational numbers at a prime
    • getHilbertSymbolReal -- computes the Hilbert symbol of two rational numbers over the real numbers
    • getIntegralDiscriminant -- computes the integral discriminant for a rational symmetric bilinear form
    • getLocalA1Degree -- computes a local A1-Brouwer degree of a list of n polynomials in n variables over a field k at a prime ideal in the zero locus
    • getLocalAlgebraBasis -- produces a basis for a local finitely generated algebra over a field k
    • getMatrix -- the underlying matrix of a Grothendieck-Witt class
    • getPadicValuation -- p-adic valuation of a rational number
    • getRank -- calculates the rank of a symmetric bilinear form
    • getRelevantPrimes -- outputs a list containing all primes p where the Hasse-Witt invariant of a symmetric bilinear form is nontrivial
    • getSignature -- computes the signature of a symmetric bilinear form over the real numbers or rational numbers
    • getSumDecomposition -- produces a simplified diagonal representative of a Grothendieck-Witt class
    • getSumDecompositionString -- produces a simplified diagonal representative of a Grothendieck-Witt class
    • getWittIndex -- returns the Witt index of a symmetric bilinear form
    • isAnisotropic -- determines whether a Grothendieck-Witt class is anisotropic
    • isIsomorphicForm -- determines whether two Grothendieck-Witt classes over CC, RR, QQ, or a finite field of characteristic not 2 are isomorphic.
    • isIsotropic -- determines whether a Grothendieck-Witt class is isotropic
    • makeDiagonalForm -- the Grothendieck-Witt class of a diagonal form
    • makeGWClass -- the Grothendieck-Witt class of a symmetric matrix
    • makeHyperbolicForm -- the Grothendieck-Witt class of a hyperbolic form
    • makePfisterForm -- the Grothendieck-Witt class of a Pfister form
    • multiplyGW -- the tensor product of two Grothendieck-Witt classes
  • Methods
    • addGW(GrothendieckWittClass,GrothendieckWittClass) -- see addGW -- the direct sum of two Grothendieck-Witt classes
    • diagonalizeViaCongruence(Matrix) -- see diagonalizeViaCongruence -- diagonalizes a symmetric matrix via congruence
    • getAnisotropicDimension(GrothendieckWittClass) -- see getAnisotropicDimension -- returns the anisotropic dimension of a symmetric bilinear form
    • getAnisotropicDimension(Matrix) -- see getAnisotropicDimension -- returns the anisotropic dimension of a symmetric bilinear form
    • getAnisotropicDimensionQQp(GrothendieckWittClass,ZZ) -- see getAnisotropicDimensionQQp -- returns the anisotropic dimension of a rational symmetric bilinear form over the p-adic rational numbers
    • getAnisotropicPart(GrothendieckWittClass) -- see getAnisotropicPart -- returns the anisotropic part of a Grothendieck-Witt class
    • getAnisotropicPart(Matrix) -- see getAnisotropicPart -- returns the anisotropic part of a Grothendieck-Witt class
    • getBaseField(GrothendieckWittClass) -- see getBaseField -- the base field of a Grothendieck-Witt class
    • getDiagonalClass(GrothendieckWittClass) -- see getDiagonalClass -- produces a diagonalized form for any Grothendieck-Witt class, with simplified terms on the diagonal
    • getDiagonalEntries(GrothendieckWittClass) -- see getDiagonalEntries -- extracts a list of diagonal entries for a GrothendieckWittClass
    • getGlobalA1Degree(List) -- see getGlobalA1Degree -- computes the global A1-Brouwer degree of a list of n polynomials in n variables over a field k
    • getHasseWittInvariant(GrothendieckWittClass,ZZ) -- see getHasseWittInvariant -- computes the Hasse-Witt invariant at a prime p for the quadratic form of the Grothendieck-Witt class
    • getHasseWittInvariant(List,ZZ) -- see getHasseWittInvariant -- computes the Hasse-Witt invariant at a prime p for the quadratic form of the Grothendieck-Witt class
    • getHilbertSymbol(QQ,QQ,ZZ) -- see getHilbertSymbol -- computes the Hilbert symbol of two rational numbers at a prime
    • getHilbertSymbol(QQ,ZZ,ZZ) -- see getHilbertSymbol -- computes the Hilbert symbol of two rational numbers at a prime
    • getHilbertSymbol(ZZ,QQ,ZZ) -- see getHilbertSymbol -- computes the Hilbert symbol of two rational numbers at a prime
    • getHilbertSymbol(ZZ,ZZ,ZZ) -- see getHilbertSymbol -- computes the Hilbert symbol of two rational numbers at a prime
    • getHilbertSymbolReal(QQ,QQ) -- see getHilbertSymbolReal -- computes the Hilbert symbol of two rational numbers over the real numbers
    • getHilbertSymbolReal(QQ,ZZ) -- see getHilbertSymbolReal -- computes the Hilbert symbol of two rational numbers over the real numbers
    • getHilbertSymbolReal(ZZ,QQ) -- see getHilbertSymbolReal -- computes the Hilbert symbol of two rational numbers over the real numbers
    • getHilbertSymbolReal(ZZ,ZZ) -- see getHilbertSymbolReal -- computes the Hilbert symbol of two rational numbers over the real numbers
    • getIntegralDiscriminant(GrothendieckWittClass) -- see getIntegralDiscriminant -- computes the integral discriminant for a rational symmetric bilinear form
    • getLocalA1Degree(List,Ideal) -- see getLocalA1Degree -- computes a local A1-Brouwer degree of a list of n polynomials in n variables over a field k at a prime ideal in the zero locus
    • getLocalAlgebraBasis(List,Ideal) -- see getLocalAlgebraBasis -- produces a basis for a local finitely generated algebra over a field k
    • getMatrix(GrothendieckWittClass) -- see getMatrix -- the underlying matrix of a Grothendieck-Witt class
    • getPadicValuation(QQ,ZZ) -- see getPadicValuation -- p-adic valuation of a rational number
    • getPadicValuation(ZZ,ZZ) -- see getPadicValuation -- p-adic valuation of a rational number
    • getRank(GrothendieckWittClass) -- see getRank -- calculates the rank of a symmetric bilinear form
    • getRank(Matrix) -- see getRank -- calculates the rank of a symmetric bilinear form
    • getRelevantPrimes(GrothendieckWittClass) -- see getRelevantPrimes -- outputs a list containing all primes p where the Hasse-Witt invariant of a symmetric bilinear form is nontrivial
    • getSignature(GrothendieckWittClass) -- see getSignature -- computes the signature of a symmetric bilinear form over the real numbers or rational numbers
    • getSumDecomposition(GrothendieckWittClass) -- see getSumDecomposition -- produces a simplified diagonal representative of a Grothendieck-Witt class
    • getSumDecompositionString(GrothendieckWittClass) -- see getSumDecompositionString -- produces a simplified diagonal representative of a Grothendieck-Witt class
    • getWittIndex(GrothendieckWittClass) -- see getWittIndex -- returns the Witt index of a symmetric bilinear form
    • net(GrothendieckWittClass) -- see GrothendieckWittClass -- a new type, intended to capture the isomorphism class of an element of the Grothendieck-Witt ring of a base field
    • texMath(GrothendieckWittClass) -- see GrothendieckWittClass -- a new type, intended to capture the isomorphism class of an element of the Grothendieck-Witt ring of a base field
    • isAnisotropic(GrothendieckWittClass) -- see isAnisotropic -- determines whether a Grothendieck-Witt class is anisotropic
    • isAnisotropic(Matrix) -- see isAnisotropic -- determines whether a Grothendieck-Witt class is anisotropic
    • isIsomorphicForm(GrothendieckWittClass,GrothendieckWittClass) -- see isIsomorphicForm -- determines whether two Grothendieck-Witt classes over CC, RR, QQ, or a finite field of characteristic not 2 are isomorphic.
    • isIsomorphicForm(Matrix,Matrix) -- see isIsomorphicForm -- determines whether two Grothendieck-Witt classes over CC, RR, QQ, or a finite field of characteristic not 2 are isomorphic.
    • isIsotropic(GrothendieckWittClass) -- see isIsotropic -- determines whether a Grothendieck-Witt class is isotropic
    • isIsotropic(Matrix) -- see isIsotropic -- determines whether a Grothendieck-Witt class is isotropic
    • makeDiagonalForm(InexactFieldFamily,QQ) -- see makeDiagonalForm -- the Grothendieck-Witt class of a diagonal form
    • makeDiagonalForm(InexactFieldFamily,RingElement) -- see makeDiagonalForm -- the Grothendieck-Witt class of a diagonal form
    • makeDiagonalForm(InexactFieldFamily,Sequence) -- see makeDiagonalForm -- the Grothendieck-Witt class of a diagonal form
    • makeDiagonalForm(InexactFieldFamily,ZZ) -- see makeDiagonalForm -- the Grothendieck-Witt class of a diagonal form
    • makeDiagonalForm(Ring,QQ) -- see makeDiagonalForm -- the Grothendieck-Witt class of a diagonal form
    • makeDiagonalForm(Ring,RingElement) -- see makeDiagonalForm -- the Grothendieck-Witt class of a diagonal form
    • makeDiagonalForm(Ring,Sequence) -- see makeDiagonalForm -- the Grothendieck-Witt class of a diagonal form
    • makeDiagonalForm(Ring,ZZ) -- see makeDiagonalForm -- the Grothendieck-Witt class of a diagonal form
    • makeGWClass(Matrix) -- see makeGWClass -- the Grothendieck-Witt class of a symmetric matrix
    • makeHyperbolicForm(InexactFieldFamily) -- see makeHyperbolicForm -- the Grothendieck-Witt class of a hyperbolic form
    • makeHyperbolicForm(InexactFieldFamily,ZZ) -- see makeHyperbolicForm -- the Grothendieck-Witt class of a hyperbolic form
    • makeHyperbolicForm(Ring) -- see makeHyperbolicForm -- the Grothendieck-Witt class of a hyperbolic form
    • makeHyperbolicForm(Ring,ZZ) -- see makeHyperbolicForm -- the Grothendieck-Witt class of a hyperbolic form
    • makePfisterForm(InexactFieldFamily,QQ) -- see makePfisterForm -- the Grothendieck-Witt class of a Pfister form
    • makePfisterForm(InexactFieldFamily,RingElement) -- see makePfisterForm -- the Grothendieck-Witt class of a Pfister form
    • makePfisterForm(InexactFieldFamily,Sequence) -- see makePfisterForm -- the Grothendieck-Witt class of a Pfister form
    • makePfisterForm(InexactFieldFamily,ZZ) -- see makePfisterForm -- the Grothendieck-Witt class of a Pfister form
    • makePfisterForm(Ring,QQ) -- see makePfisterForm -- the Grothendieck-Witt class of a Pfister form
    • makePfisterForm(Ring,RingElement) -- see makePfisterForm -- the Grothendieck-Witt class of a Pfister form
    • makePfisterForm(Ring,Sequence) -- see makePfisterForm -- the Grothendieck-Witt class of a Pfister form
    • makePfisterForm(Ring,ZZ) -- see makePfisterForm -- the Grothendieck-Witt class of a Pfister form
    • multiplyGW(GrothendieckWittClass,GrothendieckWittClass) -- see multiplyGW -- the tensor product of two Grothendieck-Witt classes

For the programmer

The object A1BrouwerDegrees is a package.