情報数学 理論計算機科学

定義 次の関数を原始帰納的関数という

  • いくつかの決められた関数は原始帰納的関数である
    • 定数関数,
    • 後者関数, (xの次の数を返す)
    • 写影関数, (セレクタ)
  • 原始帰納的関数の合成は原始帰納的関数である
    • が原始帰納的関数のとき、も原始帰納的関数である
  • 原始帰納法による関数の定義
    • が原始帰納的関数のとき、次のように定義したも原始帰納的関数である

  • イデアル関数: id(x) = x
  • 定数関数: one() = 1
  • add2(x) = suc(suc(x)) ←合成
  • 2倍
    • インクリメント(suc)を2x回すればいい
    • double(0) = 0
    • double(suc(x)) = suc(suc(double(x)))
  • 前者関数: pred(suc(y)) = y, pred(0) = 0
  • 足し算
    • yの数だけ、xをインクリメント(suc)すればいい
    • add(x, suc(y)) = suc(add(x, y)), add(x, 0) = x
  • 引き算
    • 足し算の逆
    • sub(x, 0) = x, sub(x, suc(y)) = pred(sub(x, y))
  • 掛け算
    • mul(x, 0) = 0, mul(x, suc(y)) = add(x, mul(x, y))
  • max:
    • max(x, y) = add(sub(x, y), x)
    • 別の方法
      • max(x, y) = tmp(x, y, sub(x, y)), tmp(x, y, 0) = y, tmp(x, y, d) = x

計算可能性

  • 原始帰納的関数は計算可能
    • 証明
      • は計算可能である
        • 計算可能であるということはフローチャートで書ける or whileで表現できるということだから、フローチャートを書いてあげればいい
          • フローチャートに起こせれば計算可能、ということの意味がよくわかってない(kekeho)
      • 原始帰納的関数の合成は計算可能である
        • これもフローチャートを書いてあげればいい
      • 原始帰納法は計算可能である
        • これもフローチャートを書いてあげればいい その他
  • for文に近い
  • 原始帰納的関数 計算可能関数 関数
    • 原始帰納的関数は全域的関数(Total function)
      • 全域的: 入力に対して出力が必ずある
    • コンピュータが計算する関数は全域的関数とは限らない
      • 部分的関数であることもある
        • 部分的: 入力に対して出力がないこともある
        • 奇数のときには止まらない
    • 全域的で計算可能だが、原始帰納的でない関数もある
      • アッカーマン関数
      • 原始帰納的関数よりかなり計算量を食う

資料