帰納法と余帰納法の気持ち

2026/09/23
目次

ラムレーズンアイスクリーム

圏論を使わずに(使えずに)、帰納法と余帰納法の気持ちになるですよ。

TAPLによれば

UU を普遍集合、P(U)P(U) を UU の冪集合、XX を P(U)P(U) の要素(UU の部分集合)とし、FF は P(U)P(U) から P(U)P(U) への関数で生成関数と呼びます。

クナスター・タルスキの定理から、1

  • μF=⋂{X∣F(X)⊆X}\mu F = \bigcap \{X \mid F(X) \subseteq X\}
  • νF=⋃{X∣X⊆F(X)}\nu F = \bigcup \{X \mid X \subseteq F(X)\}

とのことです。ここで、μF\mu F は FF の最小不動点、νF\nu F は FF の最大不動点を表します。

帰納法とは、ある FF と XX について F(X)⊆XF(X) \subseteq X を示すことで、μF⊆X\mu F \subseteq X を主張することらしいです。

余帰納法とは、ある FF と XX について X⊆F(X)X \subseteq F(X) を示すことで、X⊆νFX \subseteq \nu F を主張することらしいです。

???

まったく意味がわからないので、順番に考えてみます。

不動点

普遍集合を、以下の文法規則で生成される有限および無限の要素の集合とします。

  • U::=U ::=
    • 00
    • バナナ\text{バナナ}
    • S US\ U

UU の部分集合は、例えば以下のようなものが考えられます。

{}{0}{バナナ}{0,S 0,… }{0,S 0,…,バナナ,S バナナ,… }{0,S 0,…,∞}\begin{aligned} & \{\} \\ & \{0\} \\ & \{\text{バナナ}\} \\ & \{0, S\ 0, \dots\} \\ & \{0, S\ 0, \dots, \text{バナナ}, S\ \text{バナナ}, \dots\} \\ & \{0, S\ 0, \dots, \infty\} \end{aligned}

ここで、∞\infty は S S S …S\ S\ S\ \dots と限りなく続くやつで、∞=S ∞\infty = S\ \infty とします。

生成関数 FF を以下のようにします。

F(X)={0}∪{S n∣n∈X}F(X) = \{0\} \cup \{S\ n \mid n \in X\}

FF の不動点とは、X=F(X)X = F(X) となる XX のことです。これは以下の2つの条件に分解できます。

  • F(X)⊆XF(X) \subseteq X
    • 気持ち:FF によって生成可能なら、XX に含まれる
  • X⊆F(X)X \subseteq F(X)
    • 気持ち:XX に含まれるなら、FF によって生成可能

実際に、さきほどの集合が不動点かどうか確認してみます。

X={}F(X)={0}\begin{aligned} X &= \{\} \\ F(X) &= \{0\} \end{aligned}
  • ❌ F(X)⊆XF(X) \subseteq X でない
  • ✅ X⊆F(X)X \subseteq F(X) である
X={0}F(X)={0,S 0}\begin{aligned} X &= \{0\} \\ F(X) &= \{0, S\ 0\} \end{aligned}
  • ❌ F(X)⊆XF(X) \subseteq X でない
  • ✅ X⊆F(X)X \subseteq F(X) である
X={バナナ}F(X)={0,S バナナ}\begin{aligned} X &= \{\text{バナナ}\} \\ F(X) &= \{0, S\ \text{バナナ}\} \end{aligned}
  • ❌ F(X)⊆XF(X) \subseteq X でない
  • ❌ X⊆F(X)X \subseteq F(X) でない
X={0,S 0,… }F(X)={0}∪{S 0,S S 0,… }={0,S 0,S S 0,… }\begin{aligned} X &= \{0, S\ 0, \dots\} \\ F(X) &= \{0\} \cup \{S\ 0, S\ S\ 0, \dots\} \\ &= \{0, S\ 0, S\ S\ 0, \dots\} \end{aligned}
  • ✅ F(X)⊆XF(X) \subseteq X である
  • ✅ X⊆F(X)X \subseteq F(X) である
X={0,S 0,…,バナナ,S バナナ,… }F(X)={0}∪{S 0,S S 0,…,S バナナ,S S バナナ,… }={0,S 0,S S 0,…,S バナナ,S S バナナ,… }\begin{aligned} X &= \{0, S\ 0, \dots, \text{バナナ}, S\ \text{バナナ}, \dots\} \\ F(X) &= \{0\} \cup \{S\ 0, S\ S\ 0, \dots, S\ \text{バナナ}, S\ S\ \text{バナナ}, \dots\} \\ &= \{0, S\ 0, S\ S\ 0, \dots, S\ \text{バナナ}, S\ S\ \text{バナナ}, \dots\} \end{aligned}
  • ✅ F(X)⊆XF(X) \subseteq X である
  • ❌ X⊆F(X)X \subseteq F(X) でない
X={0,S 0,…,∞}F(X)={0}∪{S 0,S S 0,…,S ∞}={0,S 0,S S 0,…,∞}\begin{aligned} X &= \{0, S\ 0, \dots, \infty\} \\ F(X) &= \{0\} \cup \{S\ 0, S\ S\ 0, \dots, S\ \infty\} \\ &= \{0, S\ 0, S\ S\ 0, \dots, \infty\} \end{aligned}
  • ✅ F(X)⊆XF(X) \subseteq X である
  • ✅ X⊆F(X)X \subseteq F(X) である

候補のうち、不動点は以下の2つでした。小さい方は自然数そのもので最小不動点、大きい方は自然数に ∞\infty を足したもの(余自然数)で最大不動点となるらしいです。

  • μF=N={0,S 0,… }\mu F = \mathbb{N} = \{0, S\ 0, \dots\}
  • νF=N∪{∞}={0,S 0,…,∞}\nu F = \mathbb{N} \cup \{\infty\} = \{0, S\ 0, \dots, \infty\}

帰納法の例

すべての自然数 nn について、0+1+⋯+n=n(n+1)/20 + 1 + \dots + n = n(n + 1) / 2 が成り立つことを言いたいとします。XX を

X={n∣n∈N かつ 0+1+⋯+n=n(n+1)/2 が成り立つ}X = \{n \mid n \in \mathbb{N} \text{ かつ } 0 + 1 + \dots + n = n(n + 1) / 2 \text{ が成り立つ}\}

と取ります。

F(X)⊆XF(X) \subseteq X を示します。F(X)F(X) の各要素が XX の要素でもあることを示します。

  • F(X)F(X) の要素について、生成に使った規則で場合分けします。
  • {0}\{0\} の規則の場合
    • この規則で生成される要素は 00 です。
    • 0∈X0 \in X を示します。0∈N0 \in \mathbb{N} であり、0=0(0+1)/20 = 0(0 + 1) / 2 なのでOKです。
  • {S n∣n∈X}\{S\ n \mid n \in X\} の規則の場合
    • この規則で生成される要素は S nS\ n の形です。
    • n∈Xn \in X であることがわかっています。ここから以下がわかります。
      • n∈Nn \in \mathbb{N}
      • 0+1+⋯+n=n(n+1)/20 + 1 + \dots + n = n(n + 1) / 2(帰納法の仮定)
    • S n∈XS\ n \in X を示します。S n∈NS\ n \in \mathbb{N} は自明です。等式が成り立つのは以下でわかります。
      • 0+1+⋯+S n=(S n)(S n+1)/20 + 1 + \dots + S\ n = (S\ n)(S\ n + 1) / 2
      • 0+1+⋯+n+S n=(S n)(S n+1)/20 + 1 + \dots + n + S\ n = (S\ n)(S\ n + 1) / 2
      • 帰納法の仮定で左辺を書き換えます。
      • n(n+1)/2+S n=(S n)(S n+1)/2n(n + 1) / 2 + S\ n = (S\ n)(S\ n + 1) / 2
      • n(n+1)/2+S n=(S n)(n+2)/2n(n + 1) / 2 + S\ n = (S\ n)(n + 2) / 2
      • n(n+1)/2+S n=(S n)n/2+(S n)n(n + 1) / 2 + S\ n = (S\ n)n / 2 + (S\ n)
      • n(n+1)/2=(S n)n/2n(n + 1) / 2 = (S\ n)n / 2
      • n(n+1)/2=n(n+1)/2n(n + 1) / 2 = n(n + 1) / 2
      • 両辺が同じなので成り立ちます。

というわけで、F(X)⊆XF(X) \subseteq X である XX が1つ見つかりました。クナスター・タルスキの定理より、F(X)⊆XF(X) \subseteq X である他の集合も全部見つけてきて共通部分を取る(要素を減らす)と μF\mu F になるらしいので、μF\mu F は XX より小さいか、あるいは同じです(今回の例では同じです)。なので μF⊆X\mu F \subseteq X が主張できます。

つまり、

自然数の集合⊆0+1+⋯+n=n(n+1)/2 が成り立つ n の集合\text{自然数の集合} \subseteq 0 + 1 + \dots + n = n(n + 1) / 2 \text{ が成り立つ } n \text{ の集合}

なので、0+1+⋯+n=n(n+1)/20 + 1 + \dots + n = n(n + 1) / 2 は自然数全体でも成り立つと言えます。

今思い返してみると、確かに高校の数学の時間にやらされたような内容になっていますね。

余帰納法の例1:シンプルなやつ

∞\infty が νF\nu F に含まれることを確認してみます。ここまでの議論で明らかなのですが、余帰納法の流れを体感するためにシンプルな例で試します。XX を

X={∞}X = \{\infty\}

と取ります。

X⊆F(X)X \subseteq F(X) を示します。XX の各要素が F(X)F(X) の要素でもあることを示します。

今回の XX の要素は ∞\infty だけです。∞∈X\infty \in X と {S n∣n∈X}\{S\ n \mid n \in X\} 規則より S ∞∈F(X)S\ \infty \in F(X) ですが、S ∞=∞S\ \infty = \infty なので、結局 ∞∈F(X)\infty \in F(X) です。

というわけで、X⊆F(X)X \subseteq F(X) である XX が1つ見つかりました。クナスター・タルスキの定理より、X⊆F(X)X \subseteq F(X) である他の集合も全部見つけてきて和集合を取る(要素を増やす)と νF\nu F になるらしいので、νF\nu F は XX より大きいか、あるいは同じです。なので X⊆νFX \subseteq \nu F が主張できます。

したがって、∞∈νF\infty \in \nu F です。

余帰納法の例2:双模倣

n∈N∪{∞}n \in \mathbb{N} \cup \{\infty\} として、∞+n=∞\infty + n = \infty を言いたいと思います。

ここでは双模倣によってこれを示してみたいと思います。双模倣とは、観測(生成の逆、ここでは例えば SS の構造に着目したり、その結果 SS を1つ剥がして中身を取り出したりする操作)によって区別できないことで同じとみなす、という考え方らしいです。

ここでは普遍集合を U×UU \times U に取り替えます。XX を2項関係として、そのような関係の生成関数 GG を

G(X)={(0,0)}∪{(バナナ,バナナ)}∪{(S n,S m)∣(n,m)∈X}G(X) = \{(0, 0)\} \cup \{(\text{バナナ}, \text{バナナ})\} \cup \{(S\ n, S\ m) \mid (n, m) \in X\}

とおきます。特に最後の規則は、両方から SS が1つ剥がせて、さらにその中身も観測によって区別できないのならもとのペアも区別がつかない、という意味になっています。

こうすると、νG\nu G は観測によって区別できないペアが最大限集まった集合になるので、(n,m)∈νG(n, m) \in \nu G のとき、n=mn = m とみなすことにします。

足し算を以下のように定義しておきます。2

  • 0+m=m0 + m = m
  • バナナ+m=m\text{バナナ} + m = m
  • S n+m=S (n+m)S\ n + m = S\ (n + m)

今回示したい2項関係である XX を

X={(∞+n,∞)∣n∈N∪{∞}}X = \{(\infty + n, \infty) \mid n \in \mathbb{N} \cup \{\infty\}\}

と取ります。

X⊆G(X)X \subseteq G(X) を示します。XX の各要素が G(X)G(X) の要素でもあることを示します。

  • (∞+n,∞)∈G(X)(\infty + n, \infty) \in G(X) がゴールです。
  • ∞\infty の定義より
  • (S ∞+n,S ∞)∈G(X)(S\ \infty + n, S\ \infty) \in G(X)
  • 足し算の定義より
  • (S (∞+n),S ∞)∈G(X)(S\ (\infty + n), S\ \infty) \in G(X)
  • GG の {(S n,S m)∣(n,m)∈X}\{(S\ n, S\ m) \mid (n, m) \in X\} 規則より
  • (∞+n,∞)∈X(\infty + n, \infty) \in X
  • XX の定義そのものなのでOKです。

というわけで X⊆G(X)X \subseteq G(X) から X⊆νGX \subseteq \nu G が主張でき、XX のペアは観測によって区別できないので、∞+n=∞\infty + n = \infty と言えます。

帰納法では?

何らかの XX について、G(X)⊆XG(X) \subseteq X を示す方針を考えてみます。∞\infty を含むペアを持たない GG の不動点が以下のように見つかり、

{(0,0),(S 0,S 0),…,(バナナ,バナナ),(S バナナ,S バナナ),… }\{(0, 0), (S\ 0, S\ 0), \dots, (\text{バナナ}, \text{バナナ}), (S\ \text{バナナ}, S\ \text{バナナ}), \dots\}

最小不動点である μG\mu G も同様です。なので、μG⊆X\mu G \subseteq X から ∞+n=∞\infty + n = \infty とは主張できません。

他には「∞+n\infty + n と ∞\infty は、深さ kk まで観測すると一致する」ことを、kk についての帰納法で示すという方針もあるそうです。ただ、この方針で行ける場合と行けない場合があるらしいです。

まとめ

わかったようなわかってないような気持ちになりました。

ここから圏論方面に進むと、双対性についてより深く理解できるそうです。始代数や終余代数について調べてみましたが、僕は圏論がなにもわからないので、なにもわからないという結果となってしまいました。

証明の構成についても99割くらいミスるので、Opus先輩にRocqで確認してもらいました。

冒頭の画像は、この分野で有名な余帰納京子という架空のキャラクターの好物と思われるラムレーズンです。

参考文献

Pierce, Benjamin C. 型システム入門 プログラミング言語と型の理論. 株式会社 オーム社, 2013.


  1. 正確には、FF が単調であることと、(P(U),⊆)(P(U), \subseteq) が完備束であることが前提にあるらしいです。単調とは X⊆YX \subseteq Y ならば F(X)⊆F(Y)F(X) \subseteq F(Y) であることで、完備束とは任意の部分集合について、上限と下限が存在する半順序集合で、上限とはその集合のすべての要素以上の要素(上界)のうち最小のもので、下限はその逆で、半順序集合とは反射律、推移律、反対称律が成り立つ集合と二項関係の2つ組だそうです。↩
  2. 左の引数が ∞\infty の場合に通常の再帰だと止まりません。厳密には余再帰(cofix)で定義しておきます。↩

続けて読む…

ラムダ計算で型のリハビリ

2024/02/20

ほぼ関数だけでFizzBuzzしてツイートしたい【JavaScript】

2025/03/24

ざっくりホーア論理

2024/09/28

論理学と型システムへ同時に入門してみる

2026/01/24

Zコンビネータを思いつきたい

2024/01/22

TypeScriptの型で全加算器から浮動小数点数,そして√2

2021/06/07

書いた人

sititou70のアイコン画像
sititou70

都内の社会人エンジニア6年生。Web技術、3DCG、映像制作が好き。