一意可読性

同義語:一意読み取りunique readability

概要

一意可読性(unique readability)とは、論理式や項のように記号列として帰納的に生成される式について、各式を最後に使った記号とその成分に分ける仕方がただ 1 通りであるという性質である。項数の決まった記号を前に置く Polish 記法では、記号の重みを 1 から項数を引いた数と定めると、記号列が項であることは重みの和が 1 で、どの真の接頭辞でも和が 0 以下であることと同値になり、ここから一意可読性が従う。括弧つきの論理式では括弧の深さが 1 の 2 項結合子が主結合子になる。一意可読性があることで、真理値のように組み立て方に沿った再帰的な定義が矛盾なくできる。

$$\newcommand{C}[0]{\mathbb{C}} \newcommand{div}[0]{\mathbin{÷}} \newcommand{N}[0]{\mathbb{N}} \newcommand{Q}[0]{\mathbb{Q}} \newcommand{R}[0]{\mathbb{R}} \newcommand{Z}[0]{\mathbb{Z}} $$

前提知識: 論理式, 構造的帰納法, Backus–Naur記法

記号列 $p\land q\lor r$ は、「$p\land q$ と $r$ の選言」とも「$p$ と $q\lor r$ の連言」とも読める。$p$ が偽、$q$ と $r$ が真なら、前者は真で後者は偽である。論理式の真理値のように、式の組み立て方に沿って値を決める定義は、どの式も組み立て方が一通りに読めるときにだけ意味をもつ。この性質を 一意可読性(unique readability)という。
一意可読性を保証する書き方には、括弧を付ける書き方のほかに、演算の記号を前に置いて括弧を使わない Polish 記法(ポーランド記法、前置記法)や、後ろに置く 逆 Polish 記法(後置記法)がある。この記事では、項数の決まった記号からなる一般の記号の集まりについて、Polish 記法の記号列が項になるための必要十分条件を記号の「重み」の和で与え、そこから一意可読性を導く。括弧つきの論理式については、主結合子を括弧の深さで見つける方法を示す。

定義

記号の型と項数

集合 $F$ と写像 $\mathrm{ar}\colon F\to\mathbb{N}=\{0,1,2,\dots\}$ の組を 記号の型(signature)といい、$\mathrm{ar}(f)$ を記号 $f$ の 項数(arity)という。項数 $0$ の記号は定数や変数、項数 $1$ の記号は $\lnot$ のような 1 項の演算、項数 $2$ の記号は $\land$ や $+$ のような 2 項の演算を表す。$F$ の元を有限個並べた列全体を $F^{*}$ と書き、空列を $\varepsilon$ で表す。

Polish記法の項

記号の型 $(F,\mathrm{ar})$ について、次の規則で帰納的に生成される $F^{*}$ の部分集合を $P$ と書き、その元を Polish 記法の項 という。

  • $f\in F$、$\mathrm{ar}(f)=n$、$t_1,\dots,t_n\in P$ ならば、記号列 $ft_1t_2\cdots t_n\in P$。
    $n=0$ のときは $f$ だけの長さ $1$ の記号列が $P$ に入る。$m\ge0$ について、$P$ の元をちょうど $m$ 個つないだ記号列全体を $P^{m}$ と書く($P^{0}=\{\varepsilon\}$)。

構造的帰納法 の言葉では、$P$ は項数 $0$ の記号を基本の元とし、項数 $n\ge1$ の各 $f$ について写像 $(t_1,\dots,t_n)\mapsto ft_1\cdots t_n$ を構成子として $F^{*}$ の中で生成される集合である。

一意可読性

$P$ が 一意可読性 をもつとは、各 $t\in P$ について、$t=ft_1\cdots t_n$($\mathrm{ar}(f)=n$、$t_i\in P$)となる $f$ と組 $(t_1,\dots,t_n)$ がただ 1 つであることをいう。一般に、記号列の集合が構成子で生成されるとき、各元を構成子と成分に分ける仕方がただ 1 通りであることを一意可読性という。

一意可読性は、構造的帰納法 の定義「自由な生成」の条件 (F1)〜(F3) と同じことである。(F1) は同じ構成子での分解の一意性、(F2) は異なる構成子の像が交わらないこと、(F3) は基本の元が構成子の像に入らないことにあたる。したがって一意可読性があれば、構造的帰納法 の定理「構造的再帰定理」により、組み立て方に沿った再帰的な定義(論理式の真理値、項の値、記号の個数など)がただ 1 つの写像を定める。文法の言葉では、一意可読性は文法が曖昧でないこと(曖昧な文法でないこと。文脈自由言語 の定義「構文木」)にあたる。

重み

記号 $f\in F$ の 重み を $K(f):=1-\mathrm{ar}(f)$ とし、記号列 $w=x_1x_2\cdots x_\ell$ の重みを $K(w):=K(x_1)+\cdots+K(x_\ell)$($K(\varepsilon)=0$)と定める。記号列 $v$ が $w$ の 真の接頭辞 であるとは、空でない記号列 $z$ で $w=vz$ となるものがあることをいう($v=\varepsilon$ も許す)。

重み $K(f)$ は「記号 $f$ を置くと、まだ読み終えていない項の個数がいくつ減るか」を表す。項数 $n$ の記号を読むと、その記号で始まる項を 1 つ読み終える代わりに $n$ 個の項を新たに読まねばならないので、残りは $n-1$ 個増える。

重みによる判定と一意可読性

重みによる判定

$m\ge0$ と $w\in F^{*}$ について、次の 2 条件は同値である。

  1. $w\in P^{m}$、すなわち $w$ は $m$ 個の項をつないだ記号列である。
  2. $K(w)=m$ であり、$w$ のすべての真の接頭辞 $v$ について $K(v)< m$ である。
    特に、$w$ が項であることは、$K(w)=1$ かつ $w$ のすべての真の接頭辞 $v$ について $K(v)\le0$ であることと同値である。
先頭の記号を外して長さの帰納法

条件 2 を $C_m(w)$ と書く。$C_0(w)$ は $w=\varepsilon$ と同値である。$w=\varepsilon$ なら真の接頭辞がなく $K(\varepsilon)=0$ なので $C_0(\varepsilon)$ が成り立ち、$w\ne\varepsilon$ なら空列 $\varepsilon$ が真の接頭辞で $K(\varepsilon)=0\not< 0$ だからである。$P^{0}=\{\varepsilon\}$ なので、$m=0$ では主張が成り立つ。以下、$w$ の長さについての帰納法で、すべての $m\ge1$ について同時に示す。
(1 から 2)$w=t_1t_2\cdots t_m$($t_j\in P$)とし、$t_1=fs_1\cdots s_n$($\mathrm{ar}(f)=n$、$s_i\in P$)と書く。$w=fw'$、$w':=s_1\cdots s_nt_2\cdots t_m\in P^{n+m-1}$ であり、$w'$ は $w$ より短いので、帰納法の仮定($n+m-1=0$ の場合は上の $m=0$ の場合)により $C_{n+m-1}(w')$ が成り立つ。すると $K(w)=(1-n)+(n+m-1)=m$ である。$w$ の真の接頭辞は、$\varepsilon$(重み $0< m$)か、$w'$ の真の接頭辞 $v'$ による $fv'$ であり、後者の重みは $(1-n)+K(v')<(1-n)+(n+m-1)=m$ である。よって $C_m(w)$ が成り立つ。
(2 から 1)$C_m(w)$、$m\ge1$ とする。$K(w)=m\ne0$ なので $w\ne\varepsilon$ であり、$w=fw'$($\mathrm{ar}(f)=n$)と書ける。$K(w')=m-(1-n)=m+n-1\ge0$ であり、$w'$ の真の接頭辞 $v'$ について $fv'$ は $w$ の真の接頭辞なので $(1-n)+K(v')< m$、すなわち $K(v')< m+n-1$ である。よって $C_{m+n-1}(w')$ が成り立ち、帰納法の仮定(または $m=0$ の場合)により $w'=s_1s_2\cdots s_{m+n-1}$($s_i\in P$)と書ける。$m\ge1$ より $m+n-1\ge n$ なので、$t_1:=fs_1\cdots s_n\in P$ とおくと $w=t_1s_{n+1}\cdots s_{m+n-1}$ は $m$ 個の項をつないだ記号列である。$\square$

Polish記法の一意可読性

記号の型 $(F,\mathrm{ar})$ の Polish 記法の項の集合 $P$ について、次が成り立つ。

  1. 項の真の接頭辞は項でない。
  2. $t_1\cdots t_m=s_1\cdots s_{m'}$($t_j,s_j\in P$)ならば、$m=m'$ かつ各 $j$ について $t_j=s_j$ である。
  3. $P$ は一意可読性をもつ。すなわち各項 $t$ は、$t=ft_1\cdots t_n$($\mathrm{ar}(f)=n$、$t_i\in P$)の形にただ 1 通りに書ける。
重みの比較

1:項 $t$ の真の接頭辞 $v$ は lem-ur-weight-criterion により $K(v)\le0$ を満たすが、項の重みは $1$ である。
2:重みを比べて $m=K(t_1\cdots t_m)=K(s_1\cdots s_{m'})=m'$ である。$m$ についての帰納法で成分の一致を示す。$m=0$ なら示すことはない。$m\ge1$ なら、$t_1$ と $s_1$ はどちらも同じ記号列の先頭から始まるので、一方が他方の接頭辞である。$t_1\ne s_1$ なら短いほうが長いほうの真の接頭辞で、しかも項になり、1 に反する。よって $t_1=s_1$ であり、それを取り除いた $t_2\cdots t_m=s_2\cdots s_m$ に帰納法の仮定を使う。
3:$t=ft_1\cdots t_n=gs_1\cdots s_k$ とすると、先頭の記号を比べて $f=g$、したがって $n=k$ であり、残りの $t_1\cdots t_n=s_1\cdots s_n$ に 2 を使えば $t_i=s_i$ である。$\square$

lem-ur-weight-criterion は、記号列が項かどうかを左から 1 回読むだけで判定する方法を与える。重みの和を左から順に足していき、途中で一度も $1$ に達せず、最後にちょうど $1$ になれば項である。さらに、和が $0$ から初めて $1$ に達する位置を探せば、最初の成分 $t_1$ の終わりが分かる。

算術式の Polish 記法

$F=\{+,\times,a,b,c\}$、$\mathrm{ar}(+)=\mathrm{ar}(\times)=2$、$\mathrm{ar}(a)=\mathrm{ar}(b)=\mathrm{ar}(c)=0$ とする。重みは $K(+)=K(\times)=-1$、$K(a)=K(b)=K(c)=1$ である。記号列 $w={+}{\times}abc$ の接頭辞の重みは、左から順に $0,-1,-2,-1,0,1$(最初の $0$ は空列)であり、最後だけが $1$ に達するので $w$ は項である。成分を探すには、先頭の $+$ を除いた残り ${\times}abc$ の重みを左から足す。和は $-1,0,1,2$ と進み、${\times}ab$ の直後で初めて $1$ になるので、最初の成分は ${\times}ab$、残りの成分は $c$ である。よって $w={+}\,({\times}ab)\,c$、括弧で書けば $(a\times b)+c$ である。一方 ${+}a{\times}bc$ は $a+(b\times c)$ を表す。括弧を使わずに 2 つの読み方が区別されている。

後ろに記号を置く書き方も同じように扱える。

逆Polish記法の一意可読性

$P'$ を、$t_1,\dots,t_n\in P'$、$\mathrm{ar}(f)=n$ ならば $t_1\cdots t_nf\in P'$ という規則で生成される集合(逆 Polish 記法の項)とする。各 $t\in P'$ は $t=t_1\cdots t_nf$ の形にただ 1 通りに書ける。

記号列を逆に読む

記号列 $x_1\cdots x_\ell$ を逆順の $x_\ell\cdots x_1$ に写す写像を $\rho$ と書く。$\rho(t_1\cdots t_nf)=f\rho(t_n)\cdots\rho(t_1)$ なので、構造的帰納法により $\rho(P')\subset P$ であり、同様に $\rho(P)\subset P'$ である。$\rho$ は対合なので $\rho(P')=P$ である。$t=t_1\cdots t_nf=s_1\cdots s_kg$ なら、$\rho$ で写して $f\rho(t_n)\cdots\rho(t_1)=g\rho(s_k)\cdots\rho(s_1)$ となり、thm-ur-polish の 3 から $f=g$、$\rho(t_i)=\rho(s_i)$、したがって $t_i=s_i$ である。$\square$

逆 Polish 記法の記号列は、スタックを 1 つ使って左から読めば値を計算できる。項数 $0$ の記号はその値をスタックに積み、項数 $n$ の記号は上の $n$ 個を取り出して演算の結果を積む。たとえば $ab{\times}c{+}$ は $(a\times b)+c$ の値を計算する。スタックで読めることの証明は ポーランド記法 の定理「スタックによる読み取りの正しさ」にある。

括弧つきの論理式

命題論理 の論理式は、命題変数 $p_i$ と、論理式 $\varphi,\psi$ から作る $(\lnot\varphi)$、$(\varphi\ast\psi)$($\ast$ は $\land,\lor,\to$ のいずれか)で生成される。2 項の結合子を中に置く代わりに括弧で囲むことで、一意可読性が保たれる。これは 命題論理 の定理「一意読み取り」であり、項と量化記号を含む一階の論理式については 論理式 の定理「一意読み取り」である。どちらの証明も、数理論理学 の命題「論理式の括弧の均衡」(論理式の左括弧と右括弧の個数は等しく、真の接頭辞では空でなければ左括弧のほうが多い)に基づく。
この括弧の数え上げから、論理式を外側から分解する具体的な手順も得られる。論理式 $\varphi=x_1x_2\cdots x_\ell$ の $i$ 番目の記号の 深さ $d_\varphi(i)$ を、それより前の記号列 $x_1\cdots x_{i-1}$ に現れる左括弧の個数から右括弧の個数を引いた数と定める。

主結合子の位置

$\varphi=x_1\cdots x_\ell$ を命題変数でない論理式とする。

  1. $x_2=\lnot$ ならば、$\varphi=(\lnot\psi)$、$\psi=x_3\cdots x_{\ell-1}$ である。
  2. $x_2\ne\lnot$ ならば、2 項の結合子 $\land,\lor,\to$ のうち深さが $1$ の出現はちょうど 1 つあり、その位置を $i$ とすると $\varphi=(\psi\,x_i\,\chi)$、$\psi=x_2\cdots x_{i-1}$、$\chi=x_{i+1}\cdots x_{\ell-1}$ である。
括弧の均衡で深さを数える

論理式の定義により、命題変数でない $\varphi$ は $(\lnot\psi)$ か $(\psi\ast\chi)$ のどちらかの形をもつ(どちらの形か、また $\psi,\chi$ が何かはまだ一通りとは限らない)。論理式の最初の記号は命題変数か左括弧なので、$(\psi\ast\chi)$ の 2 番目の記号($\psi$ の最初の記号)は $\lnot$ でない。よって $x_2=\lnot$ なら前者の形で 1 が成り立つ。
$x_2\ne\lnot$ なら $\varphi=(\psi\ast\chi)$ の形の表し方が少なくとも 1 つある。そのどれについても以下が成り立つ。記号列 $\sigma$ の左括弧の個数から右括弧の個数を引いた数を $b(\sigma)$ と書くと、数理論理学 の命題「論理式の括弧の均衡」により、論理式では $b=0$、論理式の空でない真の接頭辞では $b\ge1$ である。表示した $\ast$ の前は $(\psi$ なので、その深さは $1+b(\psi)=1$ である。ほかの 2 項の結合子の出現を考える。それが $\psi$ の中にあれば、その前の記号列は $(\sigma$($\sigma$ は $\psi$ の真の接頭辞で、$\psi$ は結合子で始まらないので空でない)であり、深さは $1+b(\sigma)\ge2$ である。$\chi$ の中にあれば、同様に前の記号列は $(\psi\ast\sigma'$($\sigma'$ は $\chi$ の空でない真の接頭辞)であり、深さは $1+0+b(\sigma')\ge2$ である。よって深さ $1$ の 2 項の結合子は表示した $\ast$ だけであり、その位置は表し方によらず決まるので、$\psi,\chi$ も一通りに決まり、2 が成り立つ。$\square$

この命題により、論理式を左から 1 回読んで深さを数えれば主結合子が分かり、成分に対して同じことを繰り返せば構文木が得られる。成分の位置が記号列だけから決まるので、これは一意読み取りのもう 1 つの証明にもなっている。

主結合子を探す

$\varphi=((p\land q)\lor(\lnot r))$ では、2 番目の記号は $($ なので 2 の場合である。各記号の深さは、先頭の $($ から順に $0,1,2,2,2,2,1,1,2,2,2,1$ であり、2 項の結合子 $\land$(深さ $2$)、$\lor$(深さ $1$)のうち深さ $1$ のものは $\lor$ だけである。よって $\varphi=(\psi\lor\chi)$、$\psi=(p\land q)$、$\chi=(\lnot r)$ である。

反例:条件を外すと成り立たない

外す条件反例成り立たなくなること
各記号の項数がただ 1 つに決まるPolish 記法で $f,g$ の項数を $1$ か $2$ のどちらにも使い、$x,y$ を定数とする記号列 $fgxy$一意可読性(thm-ur-polish の 3)
異なる記号を表す文字列の一方が他方の接頭辞にならない1 項の記号 $f$ を文字 f、1 項の記号 $g$ を文字列 ff で書き、$x$ を定数とする文字列 ffx文字列としての一意可読性(記号列への分け方が一通りでない)
2 項の結合子の両側を括弧で囲む括弧のない中置記法の $p\land q\lor r$一意可読性(命題論理 の定理「一意読み取り」)
真の接頭辞の重みが $0$ 以下(lem-ur-weight-criterion)2 項の記号 $f$ と定数 $c$ からなる記号列 $ccf$「重みが $1$ なら項」という判定
各行の確かめを開く

1 行目:$f$ を 1 項、$g$ を 2 項と読めば $f(g(x,y))$、$f$ を 2 項、$g$ を 1 項と読めば $f(g(x),y)$ である(論理式 の記事の反例の表の 2 行目と同じ現象)。項数が記号ごとに決まっていないので、重み $K$ が定まらない。

2 行目:文字列 ffx は、記号列 $gx$($g$ を ff と読む)とも $ffx$(f を 2 回読む)とも分けられ、前者は $g(x)$、後者は $f(f(x))$ を表す。記号列としてはどちらも Polish 記法の項であり、thm-ur-polish は記号列についての主張なので矛盾しないが、文字列から記号列への分け方が一通りでないために、文字列としては 2 通りに読める。

3 行目:$p\land q\lor r$ は $(p\land q)\lor r$ とも $p\land(q\lor r)$ とも組み立てられ、$p$ が偽、$q,r$ が真のとき前者は真、後者は偽である(Backus–Naur記法 の注意「反例:曖昧な文法」)。

4 行目:$K(ccf)=1+1-1=1$ だが、真の接頭辞 $c$ の重みが $1$ で、条件を満たさない。$ccf$ は $c$ で始まる長さ $3$ の記号列なので Polish 記法の項でない(項数 $0$ の記号で始まる項は長さ $1$)。これは $f(c,c)$ の逆 Polish 記法である。

補足

  • 出典。 Polish 記法の項について、重み $K$ による lem-ur-weight-criterion の 1 から 2 の向き(項の重みは $1$、真の接頭辞は項でない)と thm-ur-polish は Gal15 Lemma 5.2.1–5.2.3・Theorem 5.2.1(pp. 145–146)にある。命題論理の論理式の Polish 記法についての同じ主張は Gal15 Problem 3.2.7(p. 37、演習)、括弧つきの論理式の一意可読性は Gal15 Lemma 3.2.1・Theorem 3.2.1(pp. 33–34)にある。
  • 項数の決まった記号と一階の論理式。 一階の論理式の量化 $\forall x\,\varphi$ は、変数 $x$ ごとに項数 $1$ の記号 $\forall x$ を用意したものと見ることができ、関係記号・関数記号・結合子の項数が決まっていれば、括弧とコンマを省いた Polish 記法でも thm-ur-polish がそのまま当てはまる。
  • 構文解析との関係。 Polish 記法の論理式の文法は、規則が次の 1 文字で決まる文法なので、構文解析 の定理「予測型の構文解析」により曖昧でなく、これも一意可読性の別証明になる。括弧つきの論理式の文法も、共通の左括弧を括り出すと同じ定理が使える(構文解析 の例「括弧つきの論理式と左括り出し」)。
  • 型の付いた項。 型理論 の項 $\lambda x{:}A.\,M$、$MN$ も、括弧の付け方を決めれば一意可読性をもつ記号列として書ける。項の型や簡約の定義は、項の組み立て方に沿った再帰による。

関連項目

参考文献

Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する