import Foreign.Storable
import Foreign.Marshal.Array (advancePtr)
import Data.Number.Flint
main = do
let n = 5
putStrLn "Compute a power and a sum"
withNewQadicCtxConway 3 2 0 n "a" padic_series $ \ctx -> do
CQadicCtx pctx _ _ _ _ <- peek ctx
withNewQadicWithPrec n $ \a -> do
withNewQadicWithPrec n $ \b -> do
withNewQadicWithPrec n $ \c -> do
withFmpzPoly (fromList [1, 2]) $ \poly -> do
padic_poly_set_fmpz_poly a poly pctx
qadic_print_pretty a ctx; putStr "\n"
withFmpz 4 $ \four -> qadic_pow a a four ctx
padic_poly_set_ui b 3249 pctx
qadic_add c a b ctx
qadic_print_pretty a ctx; putStr "\n"
qadic_print_pretty b ctx; putStr "\n"
qadic_print_pretty c ctx; putStr "\n"
putStr "\n"
putStrLn "Compute a Teichmuller lift"
withFmpzPoly (fromList [1, 2]) $ \poly -> do
padic_poly_set_fmpz_poly a poly pctx
qadic_teichmuller b a ctx
withFmpz 9 $ \nine -> qadic_pow c b nine ctx
qadic_print_pretty a ctx; putStr "\n"
qadic_print_pretty b ctx; putStr "\n"
qadic_print_pretty c ctx; putStr "\n"
putStr "\n"
putStrLn "Compute an inverse"
qadic_set a b
qadic_inv b a ctx
qadic_mul c a b ctx
qadic_print_pretty a ctx; putStr "\n"
qadic_print_pretty b ctx; putStr "\n"
qadic_print_pretty c ctx; putStr "\n"
putStr "\n"
------------------------------------------------------------------------------
putStrLn "Compute a Frobenius image"
withNewQadicCtxConway 3 2 0 n "X" padic_terse $ \ctx -> do
CQadicCtx pctx _ _ _ _ <- peek ctx
withNewQadicWithPrec n $ \a -> do
withNewQadicWithPrec n $ \b -> do
withFmpzPoly (fromList [78, 45]) $ \poly -> do
padic_poly_set_fmpz_poly a poly pctx
qadic_frobenius b a 1 ctx
putStr "a = "; qadic_print_pretty a ctx; putStr "\n"
putStr "b = "; qadic_print_pretty b ctx; putStr "\n"
putStrLn "Context:"; qadic_ctx_print ctx; putStr "\n"
putStr "\n"
------------------------------------------------------------------------------
putStrLn "Compute a square root"
withNewQadicCtxConway 2 3 0 n "X" padic_series $ \ctx -> do
CQadicCtx pctx _ _ _ _ <- peek ctx
withNewQadicWithPrec n $ \a -> do
withNewQadicWithPrec n $ \b -> do
withFmpzPoly (fromList [1, 3, 1]) $ \poly -> do
padic_poly_set_fmpz_poly a poly pctx
ans <- qadic_sqrt b a ctx
putStr "a = "; qadic_print_pretty a ctx; putStr "\n"
putStr "b = "; qadic_print_pretty b ctx; putStr "\n"
putStrLn $ "ans = " ++ show ans
putStrLn "Context:"; qadic_ctx_print ctx; putStr "\n"
putStr "\n"