「ヒルベルトのイプシロン記号のうまい使い方」において、ヒルベルトのイプシロン記号を集合ではなくて集合族に作用させると具合がいい、という話をしました。このことを別な側面から見てみます。
$`A`$ が空でない集合のとき、$`\varepsilon\, A`$ は、$`A`$ の要素を返します。$`\varepsilon\, \emptyset`$ は未定義です。ここで、未定義を表す“特殊な値”を $`\bot`$ (ボトム〈bottom〉)として、$`\varepsilon\, \emptyset = \bot`$ と約束します。
空集合だけではなくて、すべての集合 $`A`$ に対して次の約束をします。
- $`\varepsilon\,A`$ は、$`A_\bot`$ の要素を返す。$`A_\bot`$ は、集合 $`A`$ に未定義を表す“特殊な値” $`\bot`$ を追加した集合。
「未定義を表す“特殊な値”」がなんだかよく分かりません。次のように定義しましょう。
- $`A_\bot := A\cup \{A\}`$
こうすると、$`A \in A_\bot`$ となりますが、$`A_\bot`$ の要素としての $`A`$ を $`\bot_A`$ と書きます。次が成立します。
- $`A \subseteq A_\bot`$
- $`\bot_A \in A_\bot`$
- $`\bot_A \not\in A`$
- $`A = A_\bot \setminus \{\bot_A\}`$
$`A_\bot`$ は、要素がひとつ特定された集合なので付点集合〈pointed set〉です。
$`\varepsilon\, A`$ に関する条件は次のようになります。
- $`\varepsilon\, A`$ は、付点集合 $`A_\bot`$ に値を持つ。ただし、$`A`$ が空でないときは $`\varepsilon\, A \ne \bot_A`$ だとする。$`\newcommand{\mbf}[1]{\mathbf{#1}}`$
さて、$`F:X \to |\mbf{Set}|`$ を集合族〈ファミリー〉とします。$`F_\bot`$ は次のような付点集合の族〈family of pinted sets〉とします。
$`\text{For }x\in X\\
\quad (F_\bot)(x) := F(x)_\bot = F(x)\cup\{ \bot_{F(x)} \} = F(x)\cup\{ F(x) \}
`$
$`X\ni x \mapsto \varepsilon\, F_\bot(x)`$ は、$`X`$ 上で定義された関数となります(未定義はない)。しかし、$`(\varepsilon F_\bot)(x) = \bot_{F(x)}`$ である $`x`$ では値が未定義とみなせば、$`x \mapsto \varepsilon\, F_\bot(x)`$ は部分関数となります。これは結局、「ヒルベルトのイプシロン記号のうまい使い方」で述べた運用法と同じになります。
イプシロン記号の未定義を避ける方法として、“特殊な値” $`\bot`$ を使う方法を紹介しましたが、「イプシロン記号は集合族に対して定義する」方法と本質的な差はありません。関数に“特殊な値”を許すことと部分関数を考えることに本質的な差はないので、まー当たり前と言えます。