[Top] [Up] [Previous] [Next] [Index]

# 66 p-adic Numbers

### Sections

1. Pure p-adic Numbers
2. Extensions of the p-adic Numbers

In this chapter p is always a (fixed) prime.

The p-adic numbers Qp are the completion of the rational numbers with respect to the valuation np(pv[(a)/(b)])=v if p divides neither a nor b. They form a field of characteristic 0 which nevertheless shows some behaviour of the finite field with p elements.

A p-adic numbers can be approximated by a ``p-adic expansion'' which is similar to the decimal expansion used for the reals (but written from left to right). So for example if p=2, the numbers 1,2,3,4,[1/2] and [4/5] are represented as 1(2), 0·1(2), 1·1(2), 0·01(2), 10(2) and 0·0101(2). Approximation means to ignore powers of p, so for example with only 2 digits accuracy [4/5] would be approximated as 0·01(2). The important difference to the decimal approximation is that p-adic approximation is a ring homomorphism on the subrings of p-adic numbers whose valuation is bounded from below.

In GAP, p-adic numbers are represented by approximations. A family of (approximated) p-adic numbers consists of p-adic numbers with a certain precision and arithmetic with these numbers is done with this precision.

## 66.1 Pure p-adic Numbers

Pure p-adic numbers are the p-adic numbers described so far.

- `PurePadicNumberFamily(` p`,` precision`) O`

  returns the family of pure p-adic numbers over the prime p with precision ``digits''.

- `PadicNumber(`fam`,`rat`)`

  returns the element of the p-adic number family fam that is used to represent the rational number rat.

  p-adic numbers allow the usual operations for fields.

      gap> fam:=PurePadicNumberFamily(2,3);;
      gap> a:=PadicNumber(fam,4/5);
      0.0101(2)
      gap> 3*a;
      0.0111(2)
      gap> a/2;
      0.101(2)
      gap> a*10;
      0.001(2)

- `Valuation(` obj`) O`

  The Valuation is the p-part of the p-adic number.

- `ShiftedPadicNumber(` padic`,` int`) O`

  ShiftedPadicNumber takes a p-adic number padic and an integer shift and returns the p-adic number c, that is ``padic`* p^`shift``. The shift is just added to the p-part.

- `IsPurePadicNumber(` obj`) C`

- `IsPurePadicNumberFamily(` fam`) C`

  ## 66.2 Extensions of the p-adic Numbers

  The usual Kronecker construction with an irreducible polynomial can be used to construct extensions of the p-adic numbers. Let L be such an extension. Then there is a subfield K < L such that K is an unramified extension of the p-adic numbers and L/K is purely ramified. (For an explanation of ``ramification'' see for example neukirch, section II.7 or another book on algebraic number theory. Essentially, an extension L of the p-adic numbers generated by a rational polynomial f is unramified if f remains squarefree modulo p and is completely ramified if modulo p the polynomial f is a power of a linear factor while remaining irreducible over the p-adic numbers.) The representation of extensions of p-adic numbers in GAP uses this subfield.

- `PadicExtensionNumberFamily(` p`,` precision`,` unram`,` ram`) F`

  An extended p-adic field L is given by two polynomials h and g with coeff.-lists unram (for the unramified part) and ram (for the ramified part). Then L is isomorphic to Qp[x,y]/(h(x),g(y)).

  This function takes the prime number p and the two coefficient lists unram and ram for the two polynomials. The polynomial given by the coefficients in unram must be a cyclotomic polynomial and the polynomial given by ram an Eisenstein-polynomial (or 1+x). This is not checked by GAP.

  Every number out of L is represented as a coeff.-list for the basis {1,x,x2,¼,y,xy,x2y,¼} of L. The integer precision is the number of ``digits'' that all the coefficients have.

  A general comment: the polynomials with which `PadicExtensionNumberFamily` is called define an extension of Qp. It must be ensured that both polynomials are really irreducible over Qp! For example x^2+x+1 is not irreducible over Q_p. Therefore the ``extension'' PadicExtensionNumberFamily(3, 4, [1,1,1], [1,1]) contains non-invertible ``pseudo-p-adic numbers''. Conversely, if an ``extension'' contains noninvertible elements one of the polynomials was not irreducible.

- `PadicNumber(` fam`,` rat`) O`
- `PadicNumber(` purefam`,` list`) O`
- `PadicNumber(` extfam`,` list`) O`

  create a p-adic number in the p-adic numbers family fam. The first usage returns the p-adic number corresponding to the rational rat.

  The second usage takes a pure p-adic numbers family purefam and a list list of length 2 and returns the number `p^`list`[1] *` list`[2]`. It must be guaranteed that no entry of list[2] is divisible by the prime p. (Otherwise precision will get lost.)

  The third usage creates a number in the family extfam of a p-adic extension. The second entry must be a list L of length 2 such that list[2] is the list of coeff. for the basis {1,¼,xf-1·ye-1} of the extended p-adic field and list[1] is a common p-part of all the coeff.

  p-adic numbers allow the usual field operations.

      gap> efam:=PadicExtensionNumberFamily(3, 5, [1,1,1], [1,1]);;
      gap> PadicNumber(efam,7/9);
      padic(120(3),0(3))

  A word of warning: Depending on the actual representation of quotients, precision may seem to ``vanish''. For example in PadicExtensionNumberFamily(3, 5, [1,1,1], [1,1]) the number (1.2000, 0.1210)(3) can be represented as `[ 0, [ 1.2000, 0.1210 ] ]` or as `[-1, [ 12.000, 1.2100 ] ]` (here the coefficients have to be multiplied by p-1).

  So there may be a number (1.2, 2.2)(3) which seems to have only two digits of precision instead of the declared 5. But internally the number is stored as `[-3, [ 0.0012, 0.0022 ] ]` and so has in fact maximum precision.

- `IsPadicExtensionNumber(` obj`) C`

- `IsPadicExtensionNumberFamily(` fam`) C`

  [Top] [Up] [Previous] [Next] [Index]

  GAP 4 manual
  May 2002