F# の終了しない関数と「帰納的関数」の関係はまだよくわかりません。そこで終了しない関数を終了する関数で表すことについて ChatGPT で調べてみました。以下のように入力しました。
F# の再帰的呼び出しで無限に繰り返される関数を とします(再帰的呼び出し以外は有限回で終わるとする)。
の定義中の再帰的呼び出しは一度とし、その結果の先頭に要素を一つ追加して、
は無限リストを返すとします。
関数の列 を
は空リストを返す
を
の定義の
の呼び出しを
で置き換えたもの
とします。
の結果と
の結果の最初の
項を比較してください
と入力すると以下の結果となりました。
この問題は、F# の関数
とその有限近似
の関係について考えるもので、特に無限リストを有限回の近似で表現する方法に関する興味深い問題です。以下に、問題の構造と答えを整理します。
問題の設定
1. 関数
は無限リストを生成します。
定義中で 1回だけ再帰的に自分自身を呼び出す。
再帰呼び出しの結果の先頭に 要素を1つ追加 して無限リストを生成します。2. 関数の列
は次のように定義されます:
: 空リストを返す。
:
の定義中での再帰呼び出し
を、前の段階の
で置き換えたもの。
の結果と
の結果の比較
: 長さ
の有限リスト。
: 無限リスト。
1.
の場合:
は
を基に構築されます。
は空リスト。
は空リストの先頭に1つの要素を追加するだけなので、1つの要素を持つリストになります。
結果:
は
の最初の1項と一致する。
2.
の場合:
は
を基に構築されます。
は長さ1のリスト。
は
のリストに要素を追加する形で作られる。
結果:
は
の最初の2項と一致する。
結論
関数
の結果と無限リスト
の最初の
項は常に一致します。
つまり、を増やすことで
の無限リストを逐次的に近似できることがわかります。
これをフィボナッチ数列に適用してください
と入力すると以下の結果となりました。
フィボナッチ数列を求める関数を
の形に適用し、近似列
を構築してみます。
1. フィボナッチ数列の無限リスト
通常、フィボナッチ数列は以下の漸化式で定義されます:
F# では 無限リスト (lazy sequence) を使って次のように表現できます:let rec fibs = seq { yield 0 yield 1 yield! Seq.map2 (+) fibs (Seq.skip 1 fibs) }この `fibs` は無限に続くフィボナッチ数列を表します。
2.
の形に変形
問題の形式に合わせて、無限リストを生成する関数
を考えます:
- `f` は 自身を一度だけ再帰的に呼び出し、その結果の先頭に要素を1つ追加 します。
したがって、
という形になります。F# で書くと:
let rec f () = seq { yield 0 yield 1 yield! Seq.map2 (+) (f()) (Seq.skip 1 (f())) }この `f()` は無限リストを返します。
を
の「射影」として説明してください
と入力すると以下の結果となりました。
関数列
を無限リスト
の「射影」として説明するために、数学的な観点から整理してみます。
1. 「射影」とは?
射影 (projection) とは、大きな対象 (例えば無限集合) から小さな対象 (有限集合) を取り出す操作のことです。
例えば、無限リストに対して 最初の
項を取り出す関数 を考えると、それは
を有限な部分に射影する操作になります。
このような射影を次のように定義します:
つまり、の最初の
項を抜き出す関数
を考えると、
は
という射影の形で表現できます。2.
の構築と射影
関数列
の定義を振り返ると:
1.(空リスト)
2.は
に1つ新しいフィボナッチ数を追加したもの
これを数学的に書き直すと:
これは無限リストの最初の
項を取り出す操作
に等しいです。
つまり、
は無限リスト
の「有限部分への射影」になっている。
4. 結論
は無限リスト
の 最初の
項を取り出す射影 になっている。
- 射影演算
を適用すると、無限リストの有限近似が得られる。
で
は元の
に収束する。
したがって、
は
の射影列として、無限リストの有限部分を捉えたものと解釈できる!



![計算理論の基礎[原著第3版] 1.オートマトンと言語 計算理論の基礎[原著第3版] 1.オートマトンと言語](https://m.media-amazon.com/images/I/515uGru3WwL._SL500_.jpg)
![計算理論の基礎[原著第3版] 2.計算可能性の理論 計算理論の基礎[原著第3版] 2.計算可能性の理論](https://m.media-amazon.com/images/I/51JgQoghkSL._SL500_.jpg)
![計算理論の基礎[原著第3版] 3.複雑さの理論 計算理論の基礎[原著第3版] 3.複雑さの理論](https://m.media-amazon.com/images/I/51-z+1sEEyL._SL500_.jpg)