非専門的シンギュラリティー研究所

無限に動き続けるシステムを表す方法を AI なども使って考えていきます。

関数プログラミングの帰納的関数(1)

帰納的関数の入門書『復刊 帰納的関数』を見ています。関数プログラミングの関数と帰納的関数を比較して分類する予定です。ChatGPT も使って調べていきます。

目次は以下のようになっています。

  • 第4章 帰納的関数を定義する形式的体系
    • 4.1 形式的体系R
    • 4.2 形式的体系Rの算術化
    • 4.3 T-述語と枚挙可能定理
    • 4.4 標準形定理
  • 第5章 算術的階層
  • 第6章 決定不可能次数
    • 6.1 決定不可能次数の概念
    • 6.2 決定不可能次数の基本的構造
    • 6.3 帰納的可算次数と算術的次数
    • 6.4 完全次数
    • 6.5 Postの問題とFriedberg-Мучникの定理

まず第2章を見ていきたいと思いますが、その前に ChatGPT で調べてみます。

帰納的関数と原始帰納的関数について教えてください

と入力すると以下の結果となりました。

帰納的関数と原始帰納的関数は、計算理論や数理論理学で重要な概念です。これらは「計算可能性」や「関数の定義可能性」を形式的に捉えるために使われます。それぞれについて詳しく説明します。

1. 帰納的関数(Recursive Functions)

帰納的関数(または μ-帰納的関数)は、計算可能な関数のクラスを形式化したものです。このクラスには、以下のような特性を持つ関数が含まれます。

定義

帰納的関数は以下を基本として定義されます:
1. 基本関数:

  • 定数関数  0(x) = 0
  • 後者関数(Successor Function)  S(x) = x + 1
  • 射影関数(Projection Function)  P_i^n(x_1, \dots, x_n) = x_i


2. 閉包操作:

  • 合成: 既存の関数を組み合わせて新しい関数を作る。
  • 原始帰納法(原始再帰: 簡単な再帰的な手法で新しい関数を定義する。
  • 最小化(μ演算): ある条件を満たす最小の値を探索する(ここが原始帰納的関数と異なる点)。
重要性

帰納的関数のクラスは、計算可能な関数すべてを表現します。具体的には、Turing Machineチューリング機械)で計算可能なすべての関数が帰納的関数に対応します。

2. 原始帰納的関数(Primitive Recursive Functions)

原始帰納的関数は、帰納的関数のサブクラスで、再帰的な構造を持ちながらも「計算の終了が保証される」関数を表します。

定義

原始帰納的関数は、次の基本関数と操作によって構成されます:

1. 基本関数:

  • 定数関数  0(x) = 0
  • 後者関数  S(x) = x + 1
  • 射影関数  P_i^n(x_1, \dots, x_n) = x_i

2. 閉包操作:

  • 合成: 既存の関数を組み合わせる。
  • 原始再帰: 次の形式で関数を定義する。

\displaystyle
     f(0, x_1, \dots, x_k) = g(x_1, \dots, x_k)
\displaystyle
     f(n+1, x_1, \dots, x_k) = h(n, f(n, x_1, \dots, x_k), x_1, \dots, x_k)
ここで  g  h は既知の原始帰納的関数

制約

原始帰納的関数には「最小化(μ演算)」が含まれないため、無限ループの可能性がなく、計算が必ず終了します。

  • 加算、減算、乗算、階乗などの算術関数はすべて原始帰納的です。
  • Ackermann関数は帰納的ですが、原始帰納的ではありません(その計算は一般的な原始再帰の枠を超えるため)。

3. 帰納的関数と原始帰納的関数の違い

特徴 帰納的関数 原始帰納的関数
定義 原始帰納法 + 最小化(μ演算) 原始帰納法のみ
計算可能性 全ての計算可能な関数 終了が保証される関数のみ
Ackermann関数, 合成関数 加算, 乗算, 階乗
計算の停止保証 なし あり

まとめ

  • 原始帰納的関数は、終了が保証された安全な計算可能関数。
  • 帰納的関数は、計算可能性の完全なモデルで、終了が保証されない場合も含む。

これらは計算理論の基本概念であり、アルゴリズムの設計や計算可能性の議論において重要な役割を果たします。