原始再帰関数(げんしさいきかんすう、)とは、原始再帰と合成で定義される関数であり、再帰関数(計算可能関数)の部分集合である。原始帰納的関数とも。再帰理論において原始再帰関数は、計算可能性の完全形式化のための重要な要素となる関数のクラスの1つである。このような関数は証明論においても重要である。数論が扱う関数の多くや、実数を値とする関数の近似は原始再帰的であり、加法、除法、階乗、指数、"n" 番目の素数を求める関数などがある (Brainerd and Landweber, 1974年)。実際、原始再帰的でない関数を考案するのは難しいが、いくつかの例が知られている(限界の節を参照)。計算複雑性理論では、原始再帰関数の集合をPRと呼ぶ。原始再帰関数のクラスはwhileプログラムでwhileループを使用せずに計算できる(すなわちloopプログラムで計算可能な)関数のクラスと一致する。原始再帰関数のクラスはグジェゴルチク階層と呼ばれる階層に分類される。原始再帰関数は数論的関数(定義域と値域が自然数、つまり負でない整数 {0, 1, 2, ...} であるような関数)である。"n" 個の引数をとる関数を "n" 項関数 ("n"-ary:-ary はアリティすなわち引数の個数を意味する) と呼ぶ。基本的な原始再帰関数は以下のような公理で与えられる:より複雑な原始再帰関数は、以下の公理で与えられる作用素を適用することで得られる:上述の基本的な関数と、それに上述の作用素を有限回適用して得られる関数だけが原始再帰的関数である。射影関数を使って、上述の関数群での引数の個数を変化させることができる。射影関数の合成を行うと、ある関数の引数のサブセットを別の関数に渡すことができる。例えば、2 項原始再帰関数 "g" と "h" を次のように合成する。"f" も原始再帰的である。射影関数による形式的定義は以下のようになる。設定によっては、真理値を引数に含む原始再帰関数や値域が真理値であるような原始再帰関数が考えられる (Kleene 1952年、pp.226-227)。これは真理値を何らかの固定された手法で数に変換してやればよい。例えば、「真; true」を "1" に、「偽; false」を "0" に対応させるのが一般的である。このようにすると、集合 "A" の指示関数("1" または "0" を返す関数)をある数値が集合 "A" に含まれるかどうかを示す述語とみなすことができる。引数が 1 つで再帰的に定義される多くの数論的関数は原始再帰的である。基本的な例として加算と「限定された減算」関数がある。直観的に、加算は次の規則で再帰的に定義できる:これを厳密な原始再帰関数の定義に当てはめるため、次のように定義する:ここで、"P" は射影関数であり、3つの引数をとり、最初の引数を返す。また、"S" は後者関数である。"P" は単純な恒等関数であり、上述の原始再帰関数の定義に当てはめるために導入されている。同語反復的な定義となっていた "+" 記号が無くなっている点に注意されたい。原始再帰関数は整数ではなく自然数を扱うもので、減算は自然数の範囲では閉じていないため、ここでは限定された減算関数を扱う。限定された減算関数 sub("a
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。