ポーランド記法(Polish notation)とは、演算の記号を引数より前に書いて括弧なしで式を表す書き方である。各記号の項数が決まっていれば、記号列が項になるのは重みの和が $1$ で真の接頭辞の重みがすべて $0$ 以下のときに限られ、読み方はただ一通りに定まる。記号を引数の後ろに書く逆ポーランド記法の記号列は、空のスタックから左から読んで途中で止まらず長さ $1$ の結果が残るときに限って項であり、残った元がその値になる。重みが $1$ の記号列の回転のうちちょうど 1 つが項になるので、重みの和が $1$ になるように記号ごとの個数を指定すると、項の個数は多項係数を長さで割った値になり、二分木を数える Catalan 数はその特別な場合である。
ポーランド記法(Polish notation)とは、演算の記号をその引数より前に書き、括弧を使わずに式を表す書き方である。通常の書き方の $(a+b)\times c$ は ${\times}{+}abc$、$a+(b\times c)$ は ${+}a{\times}bc$ と書かれる。各記号がとる引数の個数(項数)さえ決まっていれば、括弧がなくても式の組み立て方はただ一通りに読める。命題論理の式をこの形で書く方法は、1920 年代の終わりに Jan Łukasiewicz が導入した(MBTZ25 付録 A.3、p. 402)。演算の記号を引数の後ろに書く書き方は 逆ポーランド記法(reverse Polish notation)とよばれ、1 本のスタックで左から順に値を計算できる。
ポーランド記法の記号列が項になるための重みによる判定と、その一意可読性は 一意可読性 で証明されている。この記事では、それを前提に、ポーランド記法と通常の括弧つきの書き方との対応を述べ、命題論理の Łukasiewicz の記法を例として扱う。そのうえで、逆ポーランド記法の記号列をスタックで読む手続きが、記号列が項の並びであるかどうかの判定と値の計算を同時に正しく行うことを証明する。さらに、記号列の巡回的なずらし(回転)のうちちょうど 1 つが項になるという巡回補題を証明し、記号ごとの個数を指定した項の個数の公式を導く。二分木の個数を数える Catalan 数は、その特別な場合である。
記号の型 $(F,\mathrm{ar})$、すなわち集合 $F$ と項数の写像 $\mathrm{ar}\colon F\to\{0,1,2,\dots\}$ を固定する(一意可読性 の定義「記号の型と項数」)。$F$ の元を有限個並べた列を 記号列 とよび、その全体を $F^*$、空列を $\varepsilon$ と書く。記号 $f$ の 重み を $K(f):=1-\mathrm{ar}(f)$、記号列 $w=x_1\cdots x_\ell$ の重みを $K(w):=K(x_1)+\cdots+K(x_\ell)$ と定める(一意可読性 の定義「重み」)。
次の規則で帰納的に生成される $F^*$ の部分集合を $P$ と書き、その元を ポーランド記法の項 という。
項数 $0$ の記号は定数や変数を表し、それだけで長さ $1$ の項になる。一意可読性 の定義「Polish記法の項」と同じものであり、そこでは次のことが証明されている。
通常の書き方では、項を $f(s_1,\dots,s_n)$ の形に括弧とコンマで組み立てる(項数 $0$ の記号 $c$ はそれだけで項)。この書き方も一意可読性をもつ(論理式 の補題「項の真の始切片」から、一意可読性 の定理「Polish記法の一意可読性」の 2・3 と同じ議論で従う)ので、構造的帰納法 の定理「構造的再帰定理」により、組み立て方に沿って
$$\pi(c):=c,\qquad \pi\bigl(f(s_1,\dots,s_n)\bigr):=f\,\pi(s_1)\cdots\pi(s_n)$$
と定めた写像 $\pi$ が矛盾なく定まる。$\pi(s)$ は $s$ から括弧とコンマを消したものにほかならない。
$\pi$ は括弧つきの項の全体から $P$ への全単射である。逆写像 $\beta$ は $\beta(ft_1\cdots t_n):=f(\beta(t_1),\dots,\beta(t_n))$ で与えられる。
$\pi$ の値が $P$ に入ることは、括弧つきの項の組み立てに沿った帰納法で分かる。$P$ の一意可読性により、$\beta$ も $P$ の組み立てに沿った再帰で矛盾なく定まる。括弧つきの項 $s=f(s_1,\dots,s_n)$ について、帰納法の仮定 $\beta(\pi(s_i))=s_i$ から $\beta(\pi(s))=\beta(f\pi(s_1)\cdots\pi(s_n))=f(s_1,\dots,s_n)=s$ である。同様に $t=ft_1\cdots t_n\in P$ について、帰納法の仮定 $\pi(\beta(t_i))=t_i$ から $\pi(\beta(t))=\pi\bigl(f(\beta(t_1),\dots,\beta(t_n))\bigr)=f\,t_1\cdots t_n=t$ である。よって $\beta\circ\pi$ と $\pi\circ\beta$ はどちらも恒等写像である。$\square$
括弧つきの項を根付きの順序木(各頂点に記号を書き、項数 $n$ の記号の頂点に左から順に $n$ 個の子をもつ木)として描くと、$\pi$ は根から出発して「頂点を訪れてから左の子から順に部分木をたどる」順(前順、preorder)に記号を読み上げることにあたる。逆ポーランド記法は、部分木をすべてたどってから頂点を読む順(後順、postorder)にあたる(二分木 の定義「前順・中順・後順」、FS09 §I.5、pp. 74–75)。
命題論理では、命題変数を小文字、否定を $\mathsf N$、連言を $\mathsf K$、選言を $\mathsf A$、含意を $\mathsf C$、同値を $\mathsf E$ で表し、$\mathsf N$ を項数 $1$、$\mathsf K,\mathsf A,\mathsf C,\mathsf E$ を項数 $2$、命題変数を項数 $0$ の記号とする(MBTZ25 付録 A.3、p. 402)。
| 通常の書き方 | ポーランド記法 |
|---|---|
| $p\land q$ | $\mathsf Kpq$ |
| $(\lnot p)\to q$ | $\mathsf{CN}pq$ |
| $\lnot(p\to q)$ | $\mathsf{NC}pq$ |
| $(p\to q)\to((q\to r)\to(p\to r))$ | $\mathsf{CC}pq\mathsf{CC}qr\mathsf Cpr$ |
| $\lnot(p\land q)\leftrightarrow(\lnot p\lor\lnot q)$ | $\mathsf{ENK}pq\mathsf{AN}p\mathsf Nq$ |
$w=\mathsf{CC}pq\mathsf{CC}qr\mathsf Cpr$ の重みは $\mathsf C$ が $-1$、命題変数が $1$ である。先頭の $\mathsf C$ を除いた残り $\mathsf Cpq\mathsf{CC}qr\mathsf Cpr$ の重みを左から足すと $-1,0,1,\dots$ と進み、$\mathsf Cpq$ の直後で初めて $1$ に達する。よって最初の引数は $\mathsf Cpq$、残りの $\mathsf{CC}qr\mathsf Cpr$ が第 2 引数であり、$w$ は「$p\to q$ ならば($q\to r$ ならば $p\to r$)」を表す。主結合子は常に先頭の記号であり、引数の切れ目は重みの和が初めて $1$ に達する位置で分かる(一意可読性 の補題「重みによる判定」の後の説明)。$\mathsf{CN}pq$ と $\mathsf{NC}pq$ では先頭の記号が違うので、主結合子がそれぞれ含意と否定であることが括弧なしで読み取れる。
記号の型 $(F,\mathrm{ar})$ の 解釈 とは、空でない集合 $D$ と、各 $f\in F$ に対する写像 $f^D\colon D^{\mathrm{ar}(f)}\to D$(項数 $0$ なら $D$ の元)の組である。逆ポーランド記法の項の 値 を
$$\operatorname{val}(t_1\cdots t_nf):=f^D\bigl(\operatorname{val}(t_1),\dots,\operatorname{val}(t_n)\bigr)$$
で定める。逆ポーランド記法の一意可読性により、これは項の組み立てに沿った再帰として矛盾なく定まる(構造的帰納法 の定理「構造的再帰定理」)。
$D$ の元の有限列を スタック とよび、右端をその 一番上 とよぶ。スタック $\sigma$ と記号列 $w\in F^*$ について、$w$ の記号を左から順に 1 つずつ読み、記号 $f$($\mathrm{ar}(f)=n$)を読むたびに次を行う。
項数 $0$ の記号では何も取り除かず、その値を積むだけである。
解釈 $D$、記号列 $w\in F^*$、整数 $m\ge0$ について、次が成り立つ。
長さの計算。 空のスタックから $w$ の接頭辞 $u$ までを停止せずに読めたとき、スタックの長さは $K(u)$ であることを、$u$ の長さについての帰納法で示す。$u=\varepsilon$ なら長さは $0=K(\varepsilon)$ である。$u$ まで読んで長さが $K(u)$ のとき、次の記号 $f$($\mathrm{ar}(f)=n$)で停止するのは $K(u)< n$、すなわち $K(uf)=K(u)+1-n<1$ のときであり、停止しなければ長さは $K(u)-n+1=K(uf)$ になる。したがって、空のスタックから $w$ を停止せずに読めることは、$w$ の空でないすべての接頭辞 $u$ について $K(u)\ge1$ であることと同値であり、そのとき結果の長さは $K(w)$ である。
判定の言い換え。 $w\in P'^m$ であることは、$K(w)=m$ かつ空でないすべての接頭辞 $u$ について $K(u)\ge1$ であることと同値であることを示す。$\rho$ は $P'^m$ を $P^m$ の上に 1 対 1 に写すので、$w\in P'^m$ は $\rho(w)\in P^m$ と同値であり、一意可読性 の補題「重みによる判定」により、これは $K(\rho(w))=m$ かつ $\rho(w)$ のすべての真の接頭辞の重みが $m$ 未満であることと同値である。$K(\rho(w))=K(w)$ である。$\rho(w)$ の真の接頭辞は、$w=uz$($u\ne\varepsilon$)と分けたときの $\rho(z)$ にちょうど対応し、$K(\rho(z))=K(w)-K(u)$ である。$K(w)=m$ のもとで、$K(\rho(z))< m$ は $K(u)>0$、すなわち $K(u)\ge1$ と同値である。
以上の 2 段から 1 が従う。
値の計算(2)。 $w$ の長さについての帰納法で示す。$m=0$ なら $w=\varepsilon$ で、結果は $\sigma$ である。$m\ge1$ とし、$t_m=y_1\cdots y_nf$($y_i\in P'$、$\mathrm{ar}(f)=n$)と書く。$w'':=t_1\cdots t_{m-1}y_1\cdots y_n$ は $m-1+n$ 個の項をつないだ $w$ より短い記号列で、$w=w''f$ である。帰納法の仮定により、$\sigma$ から $w''$ を停止せずに読め、結果は $\sigma$ の後ろに $\operatorname{val}(t_1),\dots,\operatorname{val}(t_{m-1}),\operatorname{val}(y_1),\dots,\operatorname{val}(y_n)$ を並べたものである。その長さは $n$ 以上なので $f$ で停止せず、一番上の $n$ 個 $\operatorname{val}(y_1),\dots,\operatorname{val}(y_n)$ が $f^D(\operatorname{val}(y_1),\dots,\operatorname{val}(y_n))=\operatorname{val}(t_m)$ に置き換わる。$\square$
1 と 2 を合わせると、空のスタックから読んで停止せずに長さ $1$ の結果が残れば記号列は項であり、残った元がその値である。手続きは記号列を 1 回読むだけで、項であるかどうかの判定と値の計算を同時に行う。
$D=\mathbb Z$ とし、$+,\times$ を項数 $2$ の記号、数字を項数 $0$ の記号として通常の意味で解釈する。逆ポーランド記法の記号列 $34{+}2{\times}$ を空のスタックから読むと、スタックは
$$(3)\to(3,4)\to(7)\to(7,2)\to(14)$$
と変わり、長さ $1$ の結果 $(14)$ が残る。これは $(3+4)\times2$ の値である。一方 $3{+}4$ は、$+$ を読むときスタックが $(3)$ で長さ $1<2$ なので停止する。実際、接頭辞 $3{+}$ の重みは $1-1=0<1$ である。
ポーランド記法の記号列は、右から左へ読めば同じ手続きで値を計算できる(MBTZ25 付録 A.3、p. 403)。$w$ を右から読むことは $\rho(w)$ を左から読むことであり、$\rho(ft_1\cdots t_n)=\rho(t_n)\cdots\rho(t_1)f$ なので引数が逆順に積まれる。そこで項数 $n$ の記号では、一番上の元を第 1 引数として $u_1$(一番上)、$u_2,\dots,u_n$ の順に取り出して $f^D(u_1,\dots,u_n)$ を積む。thm-pn-stack の証明は、この読み方にもそのまま当てはまる。
長さ $\ell\ge1$ の記号列 $w=x_1\cdots x_\ell$ と $0\le r< \ell$ について、$w^{(r)}:=x_{r+1}\cdots x_\ell x_1\cdots x_r$ を $w$ の 回転 という($w^{(0)}=w$)。回転の回転は回転であり、添字を $\ell$ を法として足し合わせたものになる。
長さ $\ell\ge1$ の記号列 $w$ が $K(w)=1$ を満たすならば、次が成り立つ。
$w=x_1\cdots x_\ell$ とし、$k>\ell$ に対しても $x_k:=x_{k-\ell}$ と周期的に延長して、$S_0:=0$、$S_k:=K(x_1)+\cdots+K(x_k)$ とおく。$K(w)=1$ なので、$k\ge0$ について $S_{k+\ell}=S_k+1$ である。
1:$w^{(r)}$ は $x_{r+1}\cdots x_{r+\ell}$ と同じ記号列であり、その重みは $1$ である。長さ $j$($0\le j< \ell$)の真の接頭辞の重みは $S_{r+j}-S_r$ なので、一意可読性 の補題「重みによる判定」により
$$w^{(r)}\in P\iff r\le k\le r+\ell-1\text{ を満たすすべての }k\text{ で }S_k\le S_r$$
である。$M:=\max\{S_0,S_1,\dots,S_{\ell-1}\}$ とし、$S_{r_0}=M$ となる最小の $r_0\in\{0,\dots,\ell-1\}$ をとる。
$w^{(r_0)}\in P$ を示す。$r_0\le k\le\ell-1$ なら $S_k\le M=S_{r_0}$ である。$\ell\le k\le r_0+\ell-1$ なら $k=k'+\ell$($0\le k'< r_0$)と書け、$r_0$ の最小性から $S_{k'}< M$、重みは整数なので $S_{k'}\le M-1$ であり、$S_k=S_{k'}+1\le M=S_{r_0}$ である。
逆に $w^{(r)}\in P$ とする。$r\le k\le\ell-1$ なら $S_k\le S_r$ である。$0\le k'< r$ なら $k=k'+\ell$ は $r\le k\le r+\ell-1$ を満たすので、$S_{k'}+1=S_k\le S_r$、すなわち $S_{k'}< S_r$ である。よって $S_r$ は $S_0,\dots,S_{\ell-1}$ の最大値 $M$ であり、$r$ はそれを達成する最小の添字、すなわち $r=r_0$ である。
2:$0\le r< r'< \ell$ で $w^{(r)}=w^{(r')}$ とする。$e:=r_0-r$ を $\ell$ を法として $\{0,\dots,\ell-1\}$ にとり、両辺をさらに $e$ だけ回転させると、$w^{(r_0)}=(w^{(r)})^{(e)}=(w^{(r')})^{(e)}=w^{(r'')}$ となる。ここで $r''$ は $r'+e$ を $\ell$ で割った余りであり、$r'\ne r$ なので $r''\ne r_0$ である。すると $w^{(r'')}\in P$ となって 1 の一意性に反する。$\square$
$\pm1$ の列についての同じ主張が Catalan数 の補題「巡回補題」である。そこでの $+1$ は項数 $2$ の記号に、$-1$ は項数 $0$ の記号にあたり、重みの符号を逆にとったものになっている。一般の項数の場合の主張と数え上げへの応用は FS09 Note I.47(pp. 75–76)にある。
相異なる記号 $f_1,\dots,f_d\in F$ と整数 $k_1,\dots,k_d\ge0$ をとり、$\ell:=k_1+\cdots+k_d\ge1$ とする。各 $f_i$ がちょうど $k_i$ 回現れ、ほかの記号を含まないポーランド記法の項の個数を $N$ とすると、
$$N=\begin{cases}\dfrac1\ell\cdot\dfrac{\ell!}{k_1!\,k_2!\cdots k_d!}&\left(\displaystyle\sum_{i=1}^dk_i\bigl(1-\mathrm{ar}(f_i)\bigr)=1\text{ のとき}\right),\\[3mm] 0&(\text{そうでないとき})\end{cases}$$
である。
項の重みは $1$ なので(一意可読性 の補題「重みによる判定」)、$\sum_ik_i(1-\mathrm{ar}(f_i))\ne1$ なら条件を満たす項はなく $N=0$ である。以下、この和が $1$ であるとする。各 $f_i$ がちょうど $k_i$ 回現れる長さ $\ell$ の記号列の集合を $W$ とすると、$|W|=\ell!/(k_1!\cdots k_d!)$ であり、$W$ の元の重みはどれも $1$ である。
$W$ の元 $w,w'$ が互いの回転であるとき $w\sim w'$ と書くと、$w=w^{(0)}$ であり、$w'=w^{(r)}$($r\ge1$)なら $w=w'^{(\ell-r)}$ であり、回転の回転は回転なので、$\sim$ は $W$ 上の同値関係である。$w$ の同値類は $\{w^{(0)},\dots,w^{(\ell-1)}\}$ であり、thm-pn-cycle の 2 によりちょうど $\ell$ 個の元からなり、1 によりちょうど 1 つの項を含む。$W$ はこれらの同値類に分かれるので、同値類の個数は $|W|/\ell$ であり、項の個数 $N$ はそれに等しい。$\square$
| 外す条件 | 反例 | 成り立たなくなること |
|---|---|---|
| 読み始めのスタックが空(thm-pn-stack の 1) | 項数 $2$ の記号 $f$ だけの記号列 $f$ を、長さ $2$ のスタックから読む | 「停止せずに長さ $1$ の結果が残れば項」 |
| 逆ポーランド記法の記号列を左から読む(thm-pn-stack) | ポーランド記法の項 ${+}ab$ を、同じ手続きで左から読む | 「項なら停止しない」 |
| 記号列の重みが $1$(thm-pn-cycle) | 項数 $0$ の記号 $a,b$ からなる重み $2$ の記号列 $ab$ | 「回転のうちちょうど 1 つが項」 |
1 行目:長さ $2$ のスタック $(u_1,u_2)$ から $f$ を読むと停止せずに $(f^D(u_1,u_2))$ が残るが、$f$ は長さ $1$ で項数 $0$ でない記号なので $P'$ の元でない。空のスタックから読めば、$f$ を読む時点で長さ $0<2$ となって停止する。
2 行目:${+}ab$ を左から読むと、最初の $+$ でスタックが空なので停止する。ポーランド記法の項は、右から読むか、$\rho$ で逆ポーランド記法に直してから左から読む。
3 行目:$ab$ の回転は $ab$ と $ba$ で、どちらも長さ $2$ だが、項数 $0$ の記号で始まる項は長さ $1$ なので、どちらも $P$ の元でない(どちらも $P^2$ の元である)。
なお、記号の項数がただ一つに決まることを外すと、一意可読性そのものが崩れる(一意可読性 の反例の表の 1 行目)。その場合は重み $K$ が定まらないので、この記事の定理はどれも前提を失う。
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する