このブログの更新は X(旧Twitter)アカウント @m_hiyama で通知されます。
Follow @m_hiyama

ご連絡は上記 X アカウントに DM にてお願いします。

参照用 記事

ヒルベルトのイプシロン記号のうまい使い方

ヒルベルトのイプシロン記号は、集合からその要素を気まぐれに(まったく予測できないスタイルで)取り出す操作です。ヒルベルトのイプシロン記号が便利な場面や必須な場面があります。しかし、ヒルベルトのイプシロン記号に空集合を渡したときの挙動がよく分からないので困ります。ヒルベルトのもとの定義では、「なんでもいいからテキトーな要素を返す」です。しかし、未定義としたほうが素直な気もします。

ヒルベルトのイプシロン記号が作用する対象物〈オペランド〉を、集合から集合族に変えると、使い勝手が改善することに気付きました。この使い方なら、割と気持ちよく使えます。$`%\newcommand{\cat}[1]{\mathcal{#1}}
\newcommand{\mrm}[1]{\mathrm{#1}}
\newcommand{\mbf}[1]{\mathbf{#1}}
%\newcommand{\twoto}{\Rightarrow }
%\newcommand{\op}{\mathrm{op} }
\newcommand{\inv}{\triangleleft }
\newcommand{\In}{\text{ in }}
\newcommand{\id}{\mathrm{id}}
%\newcommand{\u}[1]{\underline{#1}}
%\newcommand{\o}[1]{\overline{#1}}
\newcommand{\hyp}{ \text{-} }
%\newcommand{\Iff}{ \Leftrightarrow }
\newcommand{\Imp}{ \Rightarrow }
\newcommand{\parto}{\supset\!\to}
`$

内容:

ヒルベルトのイプシロン記号

ヒルベルトのイプシロン記号を単にイプシロン記号〈epsilon symbol〉と呼びます。もともと(ヒルベルトのオリジナル)のイプシロン記号は、変数 $`x`$ を含む(かも知れない)論理式 $`P`$ に対して次の形です。

$`\quad \varepsilon\, x\in X.P(x)`$

ラムダ計算のラムダ記号や論理の限量子と同じく束縛子(binder)の形をしています。

$`\varepsilon\, x\in X.P(x)`$ の意味は、「集合 $`X`$ の要素のなかで、条件(である論理式)$`P`$ を満たす要素をひとつだけ返す」というものです。どの要素が値として返されるかはまったく予測できません。

イプシロン記号の要点は、集合の要素をテキトーに選んで返すことなので、集合 $`A`$ に対してイプシロン記号を作用させる形でもいいでしょう。

$`\quad \varepsilon\, A`$

$`\varepsilon\, A`$ の意味は、「集合 $`A`$ の要素をひとつだけ返す」です。述語に対するイプシロン記号は、集合に対するイプシロン記号を使って次のように定義できます。

$`\quad \varepsilon\, x\in X.P(x) := \varepsilon\, \{x\in X \mid P(x)\}`$

ここから先では、イプシロン記号は集合に対して作用するとします。(さらに後でまた概念を変更しますが。)

なお、イプシロン記号に関してより詳しくは、以下の過去記事達を参照してください。

イプシロン記号の問題点

$`\varepsilon\, A`$ は、集合 $`A`$ の要素を返すのは間違いありませんが、どの要素を返すかは完全に気まぐれです。そのときどきで値が変わります(絶対変わるとも保証できませんが)。そのため、次が成立しません

$`\quad \varepsilon\, A = \varepsilon\, A`$

イプシロン記号は、戻り値が $`A`$ の要素である乱数発生関数のように考えるといいでしょう。通常、値はいったん変数に入れて使います。

$`\quad \text{let }x := \varepsilon\, A\\
\quad \text{let }y := \varepsilon\, A
`$

上のように定義〈束縛〉された変数 $`x, y`$ に関して、$`x\in A, y\in A`$ は言えますが、$`x = y`$ は言えません。が、$`x = y`$ の可能性を排除もできません -- たまたま同じ要素を2回続けて選ぶかも知れないので。

もうひとつ困るのは、$`A = \emptyset`$ のときの $`\varepsilon\, A`$ をどう考えるか? です。ヒルベルトは何でもいいから値を返すとしていますが、$`\varepsilon\, \emptyset`$ は未定義としたほうが素直な気がします。そうなると、$`\varepsilon\, A \in A`$ は無条件では成立しません。次の条件付き命題〈含意命題〉が成立します。

$`\quad A\ne \emptyset \Imp \varepsilon\, A \in A`$

上記命題を成立させたいなら、「何でもいいから値を返す」でも実はかまわないのです。しかし、気持ち悪いので、僕は(心理的・感情的な理由で)未定義にしたいのです。ただ、未定義にしても気持ち悪い感じは残ります。「$`\varepsilon\, \emptyset`$ の値が定義できるといいんだが」とはかねがね思っていました。

非決定性関数に対するイプシロン記号

イプシロン記号が作用する対象物〈オペランド〉を、単一の集合ではなくて集合族だとします。集合族の値(族の成分)である集合を無制限としてもいいのですが、特定の集合 $`Y`$ の部分集合に制限したほうが使い勝手がいいので、集合族は次の形とします。

$`\quad F:X \to \mrm{Pow}(Y)`$

ここで、$`X, Y`$ は集合であり、$`\mrm{Pow}(\hyp)`$ はベキ集合です。つまり、$`F`$ は非決定性関数〈non-deterministic function〉ということになります。

非決定性関数 $`F`$ に対して $`\varepsilon\, F`$ を定義します。$`\varepsilon\, F`$ は部分関数〈partial function〉(「帰納構造と帰納原理 // 部分関数」参照)になります。部分関数を '$`\parto`$' という矢印で表わすとして:

$`\quad \varepsilon\, F :X \parto Y`$

さて、$`\varepsilon\, F`$ を実際に定義します。定義の際に、非空集合に対する $`\varepsilon\, A`$ を使います。$`x\in X`$ に対する $`(\varepsilon\, F)(x)`$ は:

  • $`F(x)\ne \emptyset`$ のとき、 $`(\varepsilon\, F)(x) := \varepsilon\, (F(x))`$
  • $`F(x) = \emptyset`$ のとき、 $`(\varepsilon\, F)(x)`$ は未定義

部分関数 $`f`$ の定義域(値が未定義ではない部分集合)を $`\mrm{def}(f)`$ と書くとして、次が成立します。

$`\quad \mrm{def}(\varepsilon\, F) = \{x\in X\mid F(x)\ne \emptyset \}`$

もし、すべての $`x\in X`$ で $`F(x)=\emptyset`$ ならば、$`\mrm{def}(\varepsilon\, F) = \emptyset`$ となります。定義域が空集合である部分関数は、$`X, Y`$ ごとにただひとつ存在します。それを次のように表わすことにします。

$`\quad \theta_{X, Y} : X\parto Y`$

当然ながら、$`\mrm{def}(\theta_{X,Y}) = \emptyset`$ です。逆に、すべての $`x\in X`$ で $`F(x)=\emptyset`$ である $`F`$ は $`F = \theta_{X, Y}`$ です。

空集合の問題の解決

イプシロン記号を非決定性関数に対して定義することにすると、「$`\varepsilon\, \emptyset`$ の値が定義できるといいんだが」という願いはかなえられます。

$`\mbf{1} = \{0\}`$ を単元集合とします。単元集合 $`\mbf{1}`$ を域〈ドメイン〉とする非決定性関数 $`F:\mbf{1} \to \mrm{Pow}(X)`$ を考えます。$`F`$ は $`F(0)\in \mrm{Pow}(X)`$ だけで決まります。$`F(0)`$ を $`A`$ と置きます。

$`\quad \mbf{1}\ni 0 \mapsto A \in \mrm{Pow}(X)`$

$`A\ne \emptyset`$ のとき、$`\varepsilon\, F`$ は次のような(普通の)関数です。

$`\quad \mbf{1}\ni 0 \mapsto a \in X`$

ここで、$`a\in A \subseteq X`$ は、イプシロン記号が選びだした要素です。

問題は $`A = \emptyset`$ のときです。このとき、非決定性関数 $`F`$ は、「すべての $`x\in \mbf{1}`$ で $`F(x)=\emptyset`$ である $`F`$」です。前節の最後に述べたことから $`F = \theta_{\mbf{1}, X}`$ です。$`\theta_{\mbf{1}, X}`$ は確定した部分関数です。

$`\varepsilon\, \emptyset`$ を直接考えるのではなくて、次のような、非決定性関数に対するイプシロン記号を考えたわけです。

$`\quad \varepsilon\,(\mbf{1}\ni 0 \mapsto \emptyset \in \mrm{Pow}(X) )`$

この結果は、$`\theta_{\mbf{1}, X}`$ というひとつの非決定性関数になったのです。

今説明した方法は、$`F:X\to |\mbf{Set}|`$ という形のインデックス付き集合族〈ファミリー〉に対しても適用できます。この場合、$`\varepsilon\, F`$ は、$`X\parto |\mbf{Set}|`$ という部分的に定義された集合族〈ファミリー〉になります。

利用例:全単射は可逆であること

写像〈関数〉 $`f:X \to Y`$ に対して、通常、逆像は $`f^{-1}(b)`$ と書かれます。これは逆写像の記号とコンフリクト〈かち合い〉しています。ここでは、出来るだけ混乱を避けたいので、逆像は $`f^\inv(b)`$ と書きます。

$`\quad f^\inv(b) := \{x\in X\mid f(x) = b \}`$

写像 $`f`$ が全射かつ単射のとき、$`f`$ は可逆で、逆写像 $`f^{-1}`$ が存在します。逆写像は、もし存在するなら一意的です。

「$`f`$ が全射かつ単射」という前提のもとで、どうやって逆写像を作るか? 次のように定義できます。

$`\quad \varepsilon\, f^\inv`$

イプシロン記号は、非決定性関数 $`f^\inv`$ に作用しています。

$`\quad f^\inv : Y \to \mrm{Pow}(X)`$

イプシロン記号の作用により、次のような部分写像〈部分関数〉が決まるのは確かです。

$`\quad \varepsilon\, f^\inv : Y \parto X`$

「決まる」とは言っても、次の不安があります。

  1. イプシロン記号は毎回違う部分関数を返すかも知れない。つまり、部分関数が「決まる」が、別なタイミングでは、その部分関数とは違う部分関数をイプシロン記号が返すかも知れない。
  2. イプシロン記号が返した部分関数が全域である保証がない。全域でないなら逆関数が得られない。

一番目の不安は、$`f`$ が単射であることから払拭されます。単射であるので、どんな $`y\in Y`$ に対しても $`f^\inv(y)`$ は空集合か単元集合です。$`f^\inv(y) = \emptyset`$ なら $`(\varepsilon\, f^\inv)(y)`$ は未定義となり、$`f^\inv(y)`$ が単元集合なら $`(\varepsilon\, f^\inv)(y)`$ の選択肢(許される値)はひとつです。$`(\varepsilon\, f^\inv)(y)`$ が定義されているなら値は一意的であり、これは、部分関数 $`\varepsilon\, f^\inv`$ が一意に決まることです。

二番目の不安は、$`f`$ が全射であることから払拭されます。全射であるので、どんな $`y\in Y`$ に対しても $`f^\inv(y)`$ は非空集合です。$`f^\inv(y)`$ が非空集合なら $`(\varepsilon\, f^\inv)(y)`$ は定義されます(未定義ということはありません)。これは、部分関数 $`\varepsilon\, f^\inv`$ が全域関数(普通の関数)であることです。

結局、$`\varepsilon\, f^\inv`$ は、全域関数(普通の関数)として一意(関数が一意)に確定します。

おわりに

イプシロン記号は、非決定性関数または集合族に対して作用するとします。従来の集合に対して作用するイプシロン記号は、新しい用法に吸収することができます。新しい用法では、イプシロン記号の作用結果が未定義ということはありません。イプシロン記号は、どんな場合でもなにかしらの結果を必ず返します。しかしもちろん、その結果が気まぐれであることは変わりません。

イプシロン記号が気まぐれであることと、未定義かも知れないことは別なことです。気まぐれさはイプシロン記号の本質的特性なので、これはいいのですが、未定義はあまり嬉しくなかったのです。しかし、新しい用法では未定義は起こりません。未定義ではなくて、$`\theta_{X, Y}`$ という部分関数が返ります。

まとめると:

イプシロン記号は、非決定性関数を受け取り、気まぐれに、しかし必ず“何らかの部分関数”を返す。