% This file was created automatically from padics.msk.
% DO NOT EDIT!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%A  padics.msk                  GAP documentation            Alexander Hulpke
%%
%A  @(#)$Id: padics.msk,v 1.6 2002/04/15 10:02:31 sal Exp $
%%
%Y  (C) 1998 School Math and Comp. Sci., University of St.  Andrews, Scotland
%Y  Copyright (C) 2002 The GAP Group
%%
\PreliminaryChapter{p-adic Numbers}

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

The $p$-adic numbers $Q_p$ are the completion of the rational numbers with
respect to the valuation $\nu_p(p^v\frac{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$,$\frac{1}{2}$ and $\frac{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 $\frac{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.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{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>)!{for pure padics}

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.

\beginexample
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)
\endexample

\>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



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{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 \cite{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 $Q_p[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 {\sf GAP}.*

Every number  out   of  $L$ is  represented   as   a coeff.-list   for
the basis $\{1,x,x^2,\ldots,y,xy,x^2y,\ldots\}$ 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 $Q_p$. It
must be ensured that both polynomials are  really irreducible over
$Q_p$!  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,\ldots,x^{f-1}\cdot y^{e-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.



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

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


