File: [local] / OpenXM / src / asir-doc / parts / builtin / upoly.texi (download)
Revision 1.2, Tue Dec 21 02:47:34 1999 UTC (24 years, 8 months ago) by noro
Branch: MAIN
CVS Tags: maekawa-ipv6, RELEASE_20000124, RELEASE_1_2_1, RELEASE_1_1_3, RELEASE_1_1_2 Changes since 1.1: +206 -41
lines
Now 'asir-doc' can produce both English and Japanese versions of
manuals, help files and HTML files. See README for detail.
Though Takayama-san's effort to enhance 'oxweave', it is still
difficult to use it as is for 'asir-doc', so currently 'extract_man.c'
is used to extract manual sources for a specific language.
|
@comment $OpenXM: OpenXM/src/asir-doc/parts/builtin/upoly.texi,v 1.2 1999/12/21 02:47:34 noro Exp $
\BJP
@node $B0lJQ?tB?9`<0$N1i;;(B,,, $BAH$_9~$_H!?t(B
@section $B0lJQ?tB?9`<0$N1i;;(B
\E
\BEG
@node Univariate polynomials,,, Built-in Function
@section Univariate polynomials
\E
@menu
* umul umul_ff usquare usquare_ff utmul utmul_ff::
* kmul ksquare ktmul::
* utrunc udecomp ureverse::
* set_upkara set_uptkara set_upfft::
* uinv_as_power_series ureverse_inv_as_power_series::
* udiv urem urembymul urembymul_precomp ugcd::
@end menu
\JP @node umul umul_ff usquare usquare_ff utmul utmul_ff,,, $B0lJQ?tB?9`<0$N1i;;(B
\EG @node umul umul_ff usquare usquare_ff utmul utmul_ff,,, Univariate polynomials
@subsection @code{umul}, @code{umul_ff}, @code{usquare}, @code{usquare_ff}, @code{utmul}, @code{utmul_ff}
@findex umul
@findex umul_ff
@findex usquare
@findex usquare_ff
@findex utmul
@findex utmul_ff
@table @t
@item umul(@var{p1},@var{p2})
@itemx umul_ff(@var{p1},@var{p2})
\JP :: $B0lJQ?tB?9`<0$N9bB.>h;;(B
\EG :: Fast multiplication of univariate polynomials
@item usquare(@var{p1})
@itemx usquare_ff(@var{p1})
\JP :: $B0lJQ?tB?9`<0$N9bB.(B 2 $B>h;;(B
\EG :: Fast squaring of a univariate polynomial
@item utmul(@var{p1},@var{p2},@var{d})
@itemx utmul_ff(@var{p1},@var{p2},@var{d})
\JP :: $B0lJQ?tB?9`<0$N9bB.>h;;(B ($BBG$A@Z$j<!?t;XDj(B)
\EG :: Fast multiplication of univariate polynomials with truncation
@end table
@table @var
@item return
\JP $B0lJQ?tB?9`<0(B
\EG univariate polynomial
@item p1 p2
\JP $B0lJQ?tB?9`<0(B
\EG univariate polynomial
@item d
\JP $BHsIi@0?t(B
\EG non-negative integer
@end table
@itemize @bullet
\BJP
@item
$B0lJQ?tB?9`<0$N>h;;$r(B, $B<!?t$K1~$8$F7h$^$k%"%k%4%j%:%`$rMQ$$$F(B
$B9bB.$K9T$&(B.
@item
@code{umul()}, @code{usquare()}, @code{utmul()} $B$O(B
$B78?t$r@0?t$H8+$J$7$F(B, $B@0?t78?t$NB?9`<0$H$7$F@Q$r5a$a$k(B.
$B78?t$,M-8BBN(B GF(p) $B$N85$N>l9g$K$O(B, $B78?t$O(B 0 $B0J>e(B p $BL$K~$N@0?t$H8+$J$5$l$k(B.
@item
@code{umul_ff()}, @code{usquare_ff()}, @code{utmul_ff()} $B$O(B,
$B78?t$rM-8BBN$N85$H8+$J$7$F(B, $BM-8BBN>e$NB?9`<0$H$7$F(B
$B@Q$r5a$a$k(B. $B$?$@$7(B, $B0z?t$N78?t$,@0?t$N>l9g(B,
$B@0?t78?t$NB?9`<0$rJV$9>l9g$b$"$k$N$G(B, $B$3$l$i$r8F$S=P$7$?7k2L(B
$B$,M-8BBN78?t$G$"$k$3$H$rJ]>Z$9$k$?$a$K$O(B
$B$"$i$+$8$a(B @code{simp_ff()} $B$G78?t$rM-8BBN$N85$KJQ49$7$F$*$/$H$h$$(B.
@item
@code{umul_ff()}, @code{usquare_ff()}, @code{utmul_ff()} $B$O(B,
GF(2^n) $B78?t$NB?9`<0$r0z?t$K<h$l$J$$(B.
@item
@code{umul()}, @code{umul_ff()} $B$N7k2L$O(B @var{p1}, @var{p2} $B$N@Q(B,
@code{usquare()}, @code{usquare_ff()} $B$N7k2L$O(B @var{p1} $B$N(B 2 $B>h(B,
@code{utmul()}, @code{utmul_ff()} $B$N7k2L$O(B @var{p1}, @var{p2} $B$N@Q(B
$B$N(B, @var{d} $B<!0J2<$NItJ,$H$J$k(B.
@item
$B$$$:$l$b(B, @code{set_upkara()} (@code{utmul}, @code{utmul_ff} $B$K$D$$$F$O(B
@code{set_uptkara()}) $B$GJV$5$l$kCM0J2<$N<!?t$KBP$7$F$ODL>o$NI.;;(B
$B7A<0$NJ}K!(B, @code{set_upfft()} $B$GJV$5$l$kCM0J2<$N<!?t$KBP$7$F$O(B Karatsuba
$BK!(B, $B$=$l0J>e$G$O(B FFT$B$*$h$SCf9q>jM>DjM}$,MQ$$$i$l$k(B. $B$9$J$o$A(B,
$B@0?t$KBP$9$k(B FFT $B$G$O$J$/(B, $B==J,B?$/$N(B 1 $B%o!<%I0JFb$NK!(B @var{mi} $B$rMQ0U$7(B,
@var{p1}, @var{p2} $B$N78?t$r(B @var{mi} $B$G3d$C$?M>$j$H$7$?$b$N$N@Q$r(B,
FFT $B$G7W;;$7(B, $B:G8e$KCf9q>jM>DjM}$G9g@.$9$k(B. $B$=$N:](B, $BM-8BBNHG$N4X?t$K(B
$B$*$$$F$O(B, $B:G8e$K4pACBN$rI=$9K!$G3F78?t$N>jM>$r7W;;$9$k$,(B, $B$3$3$G$O(B
Shoup $B$K$h$k%H%j%C%/(B @code{[Shoup]} $B$rMQ$$$F9bB.2=$7$F$"$k(B.
\E
\BEG
@item
These functions compute products of univariate polynomials
by selecting an appropriate algorithm depending on the degrees
of inputs.
@item
@code{umul()}, @code{usquare()}, @code{utmul()}
compute products over the integers.
Coefficients in GF(p) are regarded as non-negative integers
less than p.
@item
@code{umul_ff()}, @code{usquare_ff()}, @code{utmul_ff()}
compute products over a finite field. However, if some of
the coefficients of the inputs are integral,
the result may be an integral polynomial. So if one wants
to assure that the result is a polynomial over the finite field,
apply @code{simp_ff()} to the inputs.
@item
@code{umul_ff()}, @code{usquare_ff()}, @code{utmul_ff()}
cannot take polynomials over GF(2^n) as their inputs.
@item
@code{umul()}, @code{umul_ff()} produce @var{p1*p2}.
@code{usquare()}, @code{usquare_ff()} produce @var{p1^2}.
@code{utmul()}, @code{utmul_ff()} produce @var{p1*p2 mod v^(d+1)},
where @var{v} is the variable of @var{p1}, @var{p2}.
@item
If the degrees of the inputs are less than or equal to the
value returned by @code{set_upkara()} (@code{set_uptkara()} for
@code{utmul}, @code{utmul_ff}), usual pencil and paper method is
used. If the degrees of the inputs are less than or equall to
the value returned by @code{set_upfft()}, Karatsuba algorithm
is used. If the degrees of the inputs exceed it, a combination
of FFT and Chinese remainder theorem is used.
First of all sufficiently many primes @var{mi}
within 1 machine word are prepared.
Then @var{p1*p2 mod mi} is computed by FFT for each @var{mi}.
Finally they are combined by Chinese remainder theorem.
The functions over finite fields use an improvement by V. Shoup @code{[Shoup]}.
\E
@end itemize
@example
[176] load("fff")$
[177] cputime(1)$
0sec(1.407e-05sec)
[178] setmod_ff(2^160-47);
1461501637330902918203684832716283019655932542929
0sec(0.00028sec)
[179] A=randpoly_ff(100,x)$
0sec(0.001422sec)
[180] B=randpoly_ff(100,x)$
0sec(0.00107sec)
[181] for(I=0;I<100;I++)A*B;
7.77sec + gc : 8.38sec(16.15sec)
[182] for(I=0;I<100;I++)umul(A,B);
2.24sec + gc : 1.52sec(3.767sec)
[183] for(I=0;I<100;I++)umul_ff(A,B);
1.42sec + gc : 0.24sec(1.653sec)
[184] for(I=0;I<100;I++)usquare_ff(A);
1.08sec + gc : 0.21sec(1.297sec)
[185] for(I=0;I<100;I++)utmul_ff(A,B,100);
1.2sec + gc : 0.17sec(1.366sec)
[186] deg(utmul_ff(A,B,100),x);
100
@end example
@table @t
\JP @item $B;2>H(B
\EG @item References
@fref{set_upkara set_uptkara set_upfft},
@fref{kmul ksquare ktmul}.
@end table
\JP @node kmul ksquare ktmul,,, $B0lJQ?tB?9`<0$N1i;;(B
\EG @node kmul ksquare ktmul,,, Univariate polynomials
@subsection @code{kmul}, @code{ksquare}, @code{ktmul}
@findex kmul
@findex ksquare
@findex ktmul
@table @t
@item kmul(@var{p1},@var{p2})
\JP :: $B0lJQ?tB?9`<0$N9bB.>h;;(B
\EG :: Fast multiplication of univariate polynomials
@item ksquare(@var{p1})
\JP :: $B0lJQ?tB?9`<0$N9bB.(B 2 $B>h;;(B
\EG :: Fast squaring of a univariate polynomial
@item ktmul(@var{p1},@var{p2},@var{d})
\JP :: $B0lJQ?tB?9`<0$N9bB.>h;;(B ($BBG$A@Z$j<!?t;XDj(B)
\EG :: Fast multiplication of univariate polynomials with truncation
@end table
@table @var
@item return
\JP $B0lJQ?tB?9`<0(B
\EG univariate polynomial
@item p1 p2
\JP $B0lJQ?tB?9`<0(B
\EG univariate polynomial
@item d
\JP $BHsIi@0?t(B
\EG non-negative integer
@end table
@itemize @bullet
\BJP
@item
$B0lJQ?tB?9`<0$N>h;;$r(B Karatsuba $BK!$G9T$&(B.
@item
$B4pK\E*$K$O(B @code{umul} $B$HF1MM$@$,(B, $B<!?t$,Bg$-$/$J$C$F$b(B
FFT $B$rMQ$$$?9bB.2=$O9T$o$J$$(B.
@item
GF(2^n) $B78?t$NB?9`<0$K$bMQ$$$k$3$H$,$G$-$k(B.
\E
\BEG
These functions compute products of univariate polynomials by Karatsuba
algorithm.
@item
These functions do not apply FFT for large degree inputs.
@item
These functions can compute products over GF(2^n).
\E
@end itemize
@example
[0] load("code/fff");
1
[34] setmod_ff(defpoly_mod2(160));
x^160+x^5+x^3+x^2+1
[35] A=randpoly_ff(100,x)$
[36] B=randpoly_ff(100,x)$
[37] umul(A,B)$
umul : invalid argument
return to toplevel
[37] kmul(A,B)$
@end example
\JP @node set_upkara set_uptkara set_upfft,,, $B0lJQ?tB?9`<0$N1i;;(B
\EG @node set_upkara set_uptkara set_upfft,,, Univariate polynomials
@subsection @code{set_upkara}, @code{set_uptkara}, @code{set_upfft}
@findex set_upkara
@findex set_uptkara
@findex set_upfft
@table @t
@item set_upkara([@var{threshold}])
@itemx set_uptkara([@var{threshold}])
@itemx set_upfft([@var{threshold}])
\JP :: 1 $BJQ?tB?9`<0$N@Q1i;;$K$*$1$k(B N^2 , Karatsuba, FFT $B%"%k%4%j%:%`$N@ZBX$($NogCM(B
\BEG
:: Set thresholds in the selection of an algorithm from N^2, Karatsuba,
FFT algorithms for univariate polynomial multiplication.
\E
@end table
@table @var
@item return
\JP $B@_Dj$5$l$F$$$kCM(B
\EG value currently set
@item threshold
\JP $BHsIi@0?t(B
\EG non-negative integer
@end table
@itemize @bullet
\BJP
@item
$B$$$:$l$b(B, $B0lJQ?tB?9`<0$N@Q$N7W;;$K$*$1$k(B, $B%"%k%4%j%:%`@ZBX$($NogCM$r(B
$B@_Dj$9$k(B.
@item
$B0lJQ?tB?9`<0$N@Q$O(B, $B<!?t(B N $B$,>.$5$$HO0O$G$ODL>o$N(B N^2 $B%"%k%4%j%:%`(B, $BCfDxEY(B
$B$N>l9g(B Karatsuba $B%"%k%4%j%:%`(B, $BBg$-$$>l9g$K$O(B FFT $B%"%k%4%j%:%`$G7W;;(B
$B$5$l$k(B. $B$3$N@ZBX$($N<!?t$r@_Dj$9$k(B.
@item
$B>\:Y$O(B, $B$=$l$>$l$N@Q4X?t$N9`$r;2>H$N$3$H(B.
\E
\BEG
@item
These functions set thresholds in the selection of an algorithm from N^2,
Karatsuba, FFT algorithms for univariate polynomial multiplication.
@item
Products of univariate polynomials are computed by N^2, Karatsuba,
FFT algorithms. The algorithm selection is done according to the degrees of
input polynomials and the thresholds.
@item
See the description of each function for details.
\E
@end itemize
@table @t
\JP @item $B;2>H(B
\EG @item References
@fref{kmul ksquare ktmul},
@fref{umul umul_ff usquare usquare_ff utmul utmul_ff}.
@end table
\JP @node utrunc udecomp ureverse,,, $B0lJQ?tB?9`<0$N1i;;(B
\EG @node utrunc udecomp ureverse,,, Univariate polynomials
@subsection @code{utrunc}, @code{udecomp}, @code{ureverse}
@findex utrunc
@findex udecomp
@findex ureverse
@table @t
@item utrunc(@var{p},@var{d})
@itemx udecomp(@var{p},@var{d})
@itemx ureverse(@var{p})
\JP :: $BB?9`<0$KBP$9$kA`:n(B
\EG :: Operations on polynomials
@end table
@table @var
@item return
\JP $B0lJQ?tB?9`<0$"$k$$$O0lJQ?tB?9`<0$N%j%9%H(B
\EG univariate polynomial or list of univariate polynomials
@item p
\JP $B0lJQ?tB?9`<0(B
\EG univariate polynomial
@item d
\JP $BHsIi@0?t(B
\EG non-negative integer
@end table
@itemize @bullet
\BJP
@item
@var{p} $B$NJQ?t$r(B x $B$H$9$k(B. $B$3$N$H$-(B @var{p} = @var{p1}+x^(d+1)@var{p2}
(@var{p1} $B$N<!?t$O(B @var{d} $B0J2<(B) $B$HJ,2r$G$-$k(B. @code{utrunc()} $B$O(B
@var{p1} $B$rJV$7(B, @code{udecomp()} $B$O(B [@var{p1},@var{p2}] $B$rJV$9(B.
@item
@var{p} $B$N<!?t$r(B @var{e} $B$H$7(B, @var{i} $B<!$N78?t$r(B @var{p[i]} $B$H$9$l$P(B,
@code{ureverse()} $B$O(B @var{p[e]}+@var{p[e-1]}x+... $B$rJV$9(B.
\E
\BEG
@item
Let @var{x} be the variable of @var{p}. Then @var{p} can be decomposed
as @var{p} = @var{p1}+x^(d+1)@var{p2}, where the degree of @var{p1}
is less than or equal to @var{d}.
Under the decomposition, @code{utrunc()} returns
@var{p1} and @code{udecomp()} returns [@var{p1},@var{p2}].
@item
Let @var{e} be the degree of @var{p} and @var{p[i]} the coefficient
of @var{p} at degree @var{i}. Then
@code{ureverse()} returns @var{p[e]}+@var{p[e-1]}x+....
\E
@end itemize
@example
[132] utrunc((x+1)^10,5);
252*x^5+210*x^4+120*x^3+45*x^2+10*x+1
[133] udecomp((x+1)^10,5);
[252*x^5+210*x^4+120*x^3+45*x^2+10*x+1,x^4+10*x^3+45*x^2+120*x+210]
[134] ureverse(3*x^3+x^2+2*x);
2*x^2+x+3
@end example
@table @t
\JP @item $B;2>H(B
\EG @item References
@fref{udiv urem urembymul urembymul_precomp ugcd}.
@end table
\JP @node uinv_as_power_series ureverse_inv_as_power_series,,, $B0lJQ?tB?9`<0$N1i;;(B
\EG @node uinv_as_power_series ureverse_inv_as_power_series,,, Univariate polynomials
@subsection @code{uinv_as_power_series}, @code{ureverse_inv_as_power_series}
@findex uinv_as_power_series
@findex ureverse_inv_as_power_series
@table @t
@item uinv_as_power_series(@var{p},@var{d})
@itemx ureverse_inv_as_power_series(@var{p},@var{d})
\JP :: $BB?9`<0$rQQ5i?t$H$_$F(B, $B5U857W;;(B
\EG :: Computes the truncated inverse as a power series.
@end table
@table @var
@item return
\JP $B0lJQ?tB?9`<0(B
\EG univariate polynomial
@item p
\JP $B0lJQ?tB?9`<0(B
\EG univariate polynomial
@item d
\JP $BHsIi@0?t(B
\EG non-negative integer
@end table
@itemize @bullet
\BJP
@item
@code{uinv_as_power_series(@var{p},@var{d})} $B$O(B, $BDj?t9`$,(B 0 $B$G$J$$(B
$BB?9`<0(B @var{p} $B$KBP$7(B, @var{p}@var{r}-1 $B$N:GDc<!?t$,(B @var{d}+1
$B0J>e$K$J$k$h$&$J(B $B9b!9(B @var{d} $B<!$NB?9`<0(B @var{r} $B$r5a$a$k(B.
@item
@code{ureverse_inv_as_power_series(@var{p},@var{d})} $B$O(B
@var{p} $B$N<!?t$r(B @var{e} $B$H$9$k$H$-(B, @var{p1}=@code{ureverse(@var{p},@var{e})}
$B$KBP$7$F(B @code{uinv_as_power_series(@var{p1},@var{d})} $B$r7W;;$9$k(B.
@item
@code{rembymul_precomp()} $B$N0z?t$H$7$FMQ$$$k>l9g(B, @code{ureverse_inv_as_power_series()} $B$N7k2L$r$=$N$^$^MQ$$$k$3$H$,$G$-$k(B.
\E
\BEG
@item
For a polynomial @var{p} with a non zero constant term,
@code{uinv_as_power_series(@var{p},@var{d})} computes
a polynomial @var{r} whose degree is at most @var{d}
such that @var{p*r = 1 mod x^(d+1)}, where @var{x} is the variable
of @var{p}.
@item
Let @var{e} be the degree of @var{p}.
@code{ureverse_inv_as_power_series(@var{p},@var{d})} computes
@code{uinv_as_power_series(@var{p1},@var{d})} for
@var{p1}=@code{ureverse(@var{p},@var{e})}.
@item
The output of @code{ureverse_inv_as_power_series()} can be used
as the input of @code{rembymul_precomp()}.
\E
@end itemize
@example
[123] A=(x+1)^5;
x^5+5*x^4+10*x^3+10*x^2+5*x+1
[124] uinv_as_power_series(A,5);
-126*x^5+70*x^4-35*x^3+15*x^2-5*x+1
[126] A*R;
-126*x^10-560*x^9-945*x^8-720*x^7-210*x^6+1
[127] A=x^10+x^9;
x^10+x^9
[128] R=ureverse_inv_as_power_series(A,5);
-x^5+x^4-x^3+x^2-x+1
[129] ureverse(A)*R;
-x^6+1
@end example
@table @t
\JP @item $B;2>H(B
\EG @item References
@fref{utrunc udecomp ureverse},
@fref{udiv urem urembymul urembymul_precomp ugcd}.
@end table
\JP @node udiv urem urembymul urembymul_precomp ugcd,,, $B0lJQ?tB?9`<0$N1i;;(B
\EG @node udiv urem urembymul urembymul_precomp ugcd,,, Univariate polynomials
@subsection @code{udiv}, @code{urem}, @code{urembymul}, @code{urembymul_precomp}, @code{ugcd}
@findex udiv
@findex urem
@findex urembymul
@findex urembymul_precomp
@findex ugcd
@table @t
@item udiv(@var{p1},@var{p2})
@item urem(@var{p1},@var{p2})
@item urembymul(@var{p1},@var{p2})
@item urembymul_precomp(@var{p1},@var{p2},@var{inv})
@item ugcd(@var{p1},@var{p2})
\JP :: $B0lJQ?tB?9`<0$N=|;;(B, GCD
\EG :: Division and GCD for univariate polynomials.
@end table
@table @var
@item return
\JP $B0lJQ?tB?9`<0(B
\EG univariate polynomial
@item p1,p2,inv
\JP $B0lJQ?tB?9`<0(B
\EG univariate polynomial
@end table
@itemize @bullet
\BJP
@item
$B0lJQ?tB?9`<0(B @var{p1}, @var{p2} $B$KBP$7(B,
@code{udiv} $B$O>&(B, @code{urem}, @code{urembymul} $B$O>jM>(B,
@code{ugcd} $B$O(B GCD $B$rJV$9(B.
$B$3$l$i$O(B, $BL)$J0lJQ?tB?9`<0$KBP$9$k9bB.2=$r?^$C$?$b$N$G$"$k(B.
@code{urembymul} $B$O(B, @var{p2} $B$K$h$k>jM>7W;;$r(B, @var{p2} $B$N(B
$BQQ5i?t$H$7$F$N5U857W;;$*$h$S(B, $B>h;;(B 2 $B2s$KCV$-49$($?$b$N$G(B,
$B<!?t$,Bg$-$$>l9g$KM-8z$G$"$k(B.
@item
@code{urembymul_precomp} $B$O(B, $B8GDj$5$l$?B?9`<0$K$h$k>jM>(B
$B7W;;$rB??t9T$&>l9g$J$I$K8z2L$rH/4x$9$k(B.
$BBh(B 3 $B0z?t$O(B, $B$"$i$+$8$a(B @code{ureverse_inv_as_power_series()} $B$K(B
$B$h$j7W;;$7$F$*$/(B.
\E
\BEG
@item
For univariate polynomials @var{p1} and @var{p2},
there exist polynomials @var{q} and @var{r} such that
@var{p1=q*p2+r} and the degree of @var{r} is less than that of @var{p2}.
Then @code{udiv} returns @var{q}, @code{urem} and @code{urembymul} return
@var{r}. @code{ugcd} returns the polynomial GCD of @var{p1} and @var{p2}.
These functions are specially tuned up for dense univariate polynomials.
In @code{urembymul} the division by @var{p2} is replaced with
the inverse computation of @var{p2} as a power series and
two polynomial multiplications. It speeds up the computation
when the degrees of inputs are large.
@item
@code{urembymul_precomp} is efficient when one repeats divisions
by a fixed polynomial.
One has to compute the third argument by @code{ureverse_inv_as_power_series()}.
\E
@end itemize
@example
[177] setmod_ff(2^160-47);
1461501637330902918203684832716283019655932542929
[178] A=randpoly_ff(200,x)$
[179] B=randpoly_ff(101,x)$
[180] cputime(1)$
0sec(1.597e-05sec)
[181] srem(A,B)$
0.15sec + gc : 0.15sec(0.3035sec)
[182] urem(A,B)$
0.11sec + gc : 0.12sec(0.2347sec)
[183] urembymul(A,B)$
0.08sec + gc : 0.09sec(0.1651sec)
[184] R=ureverse_inv_as_power_series(B,101)$
0.04sec + gc : 0.03sec(0.063sec)
[185] urembymul_precomp(A,B,R)$
0.03sec(0.02501sec)
@end example
@table @t
\JP @item $B;2>H(B
\EG @item References
@fref{uinv_as_power_series ureverse_inv_as_power_series}.
@end table