## Algorithm for Weierstrass Preparation Theorem for Formal Power Series

### Remember to vote up questions/answers you find interesting or helpful (requires 15 reputation points)

The Weierstrass preparation theorem for formal power series rings guarantees that if a given formal series $f(z) = \sum a_k z^k \in R[[z]]$ where $R$ is a complete local ring with maximal ideal $M$ has $a_k \in M$ for $k < n$ and $a_n \in R^* = M^c$, then

$$f = (z^n + b_{n-1}z^{n-1} + \cdots + b_0)u$$ where $b_k \in M$ and $u$ is a unit in $R[[z]]$.

I need an explicit algorithm for calculating this Weierstrass polynomial (or distinguished polynomial) for a given $f$. In my case the coefficient ring is $R = \mathbb Z_3[[x]]$, formal power series over the 3-adics. So any algorithm would have to be robust enough to handle these coefficients.

Does anyone know of such an algorithm for a math software package?

-

Just a comment, since I don't know and don't have the time to check: maybe you want to look at the documentation of the constructor WEIER in FriCAS whether this is what you want.  If so, the file weier.spad.pamphlet in the FriCAS distribution (fricas.sourceforge.net) contains the source.  Don't hesitate to ask on fricas-devel@googlegroups.com – Martin Rubey Oct 18 2010 at 7:22
I don't think either MAGMA or SAGE have such functionality built in. But it should be trivial to code in any package which handles power series with not-necessarily-field coefficients. Look at Manin's proof in Ch.5 sec.2 of Lang's "Cyclotomic Field", (p.130 of the combined edition), which gives an explicit formula.   – Tony Scholl Oct 18 2010 at 14:23
It seems that Manin's method suggests an algoriithm to approximate the unit power series (that I called "u" above) to any finite degree of precision.  But being interested in the polynomial I would need to calculate u exactly so that I could find f*(u^-1).  The package WEIER seems to only work for field coefficients, though I had trouble executing it.  Entreaties to the FriCAS development group haven't produced a response. – R. Nendorf Nov 8 2010 at 18:37

## 2 Answers

If you're still interested in the answer to this...I also needed an explicit algorithm for calculating associated Weierstrass polynomials and provide two such algorithms in http://arxiv.org/abs/1107.4860v2, Algorithms 5.2 and 5.4. The first one is simplest and is based on Manin's method and a result by Sumida.

-

### You can accept an answer to one of your own questions by clicking the check mark next to it. This awards 15 reputation points to the person who answered and 2 reputation points to you.

Here's an algorithm that I use. Let's call $S$ the degree-$n$ shift operation, sending $\sum c_kz^k$ to $\sum c_{n+k}z^k$, in other words the quotient when you divide a power series by $z^n$. Step 0: divide $f$ by $Sf$, giving you a power series $f_1$ such that $Sf_1\equiv 1$ modulo $M$. Step $i$, for $i > 0$: repeat. At each stage, you get a power series $f_i$ for which $Sf_i\equiv 1$ modulo $M^i$. For a quicker variant of Step $i$ (for $i > 0$), instead multiply by $2-Sf_i$. It works because you've constructed a convergent infinite product.

-

Dear Prof. Lubin, I would also like to thank you for this answer. I am now using this in a small computational project I'm working on. Though, I was wondering, in the "quicker variant", is the rate of convergence faster, or is it just quicker because multiplication is quicker than division? – Dror Speiser Mar 8 2012 at 0:29
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 29, "mathjax_display_tex": 1, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0}, "config": {"markdown_headings": true, "markdown_code": false, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "github"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "english_confidence": 0.9342930316925049, "perplexity_flag": "middle"}