Flint2-0.1.0.0: src/Data/Number/Flint/Padic.hs
{-|
module : Data.Number.Flint.Padic
copyright : (c) 2022 Hartmut Monien
license : GNU GPL, version 2 or above (see LICENSE)
maintainer : hmonien@uni-bonn.de
= p-adic numbers
A @Padic@ represents a p-adic number.
This module implements operations p-adic numbers.
== Basic usage
Calculate a solution of \(x^2-2=0\) over \(\mathbb Q_7\) using default
precision (20 digits).
@
import Data.Number.Flint
main = do
withNewPadicCtx 7 1 20 padic_series $ \\ctx ->
withNewPadic $ \\x -> do
padic_set_ui x 2 ctx
padic_sqrt x x ctx
padic_print x ctx
putStr "\\n"
@
Running main yields:
>>> main
3 + 1*7^1 + 2*7^2 + 6*7^3 + 1*7^4 + 2*7^5 + 1*7^6 + 2*7^7 + 4*7^8 + 6*7^9 + 6*7^10 + 2*7^11 + 1*7^12 + 1*7^13 + 2*7^15 + 1*7^16 + 1*7^17 + 4*7^18 + 6*7^19
== Introduction
The @Padic@ data type represents elements of \(\mathbb{Q}_p\) to
precision \(N\), stored in the form \(x = p^v u\)
with \(u, v \in \mathbb{Z}\). Arithmetic operations can be carried out with
respect to a context containing the prime number \(p\) and various
pieces of pre-computed data.
Independent of the context, we consider a \(p\)-adic number x = u p^v to
be in canonical form whenever either p nmid u or \(u = v = 0\), and we
say it is reduced if, in addition, for non-zero \(u\), \(u \in (0, p^{N-v})\).
We briefly describe the interface:
The functions in this module expect arguments of type @Padic@, and
each variable carries its own precision. The functions have an interface
that is similar to the MPFR functions. In particular, they have the same
semantics, specified as follows: Compute the requested operation exactly
and then reduce the result to the precision of the output variable.
-}
module Data.Number.Flint.Padic (
module Data.Number.Flint.Padic.FFI,
) where
import Data.Number.Flint.Padic.FFI