いったん帰納的可算集合について調べていきます。これは ChatGPT で答えてくれるようです。プログラミング言語の関数に適用できそうです。
帰納的可算集合とはどのようなものですか
と入力すると以下の結果となりました。
帰納的可算集合(Recursively Enumerable Set、半決定可能集合とも呼ばれる) とは、計算理論や数理論理学において、あるチューリング機械によって列挙されることが可能な集合のことです。
2. 帰納的集合との違い
3. 例
例 1: チューリング機械の受理言語
- 任意のチューリング機械
に対して、
が受理する入力の集合は帰納的可算です。
が入力
を受理するなら、ある時点で停止するので、それを確認できます。
- 受理しない場合、停止しない可能性があるため、判定はできません。
例 2: 停止問題に関連する集合
チューリング機械が列挙するとは何を表していますか
と入力すると以下の結果となりました。
チューリング機械が列挙するとは、チューリング機械がある集合の要素を次々と出力することを意味します。具体的には、次のような動作をします:
1. 列挙の定義
- チューリング機械
が集合
を列挙するとは、
が停止するたびにテープ上に
の要素を1つずつ書き出すことです。
- 順序は問わない:
の要素をどの順番で出力しても構いません。同じ要素を繰り返し出力しても問題ありませんが、全ての要素が必ず一度は出力される必要があります。
2. 列挙の具体例
例: 自然数の列挙
自然数全体の集合
を列挙するチューリング機械は次のように動作します:
1. 初期状態で
を出力して停止。
2. 次にを出力して停止。
3. 次にを出力して停止。
4. 以下同様に、すべての自然数を順に出力。順序は
のように自然な順序でも良いし、
のように順番がバラバラでも構いません。
例: 素数の列挙
素数の集合
を列挙するチューリング機械は、次のように動作します:
1.を出力して停止。
2.を出力して停止。
3.を出力して停止。
4. 以下、すべての素数を順に出力。4. 列挙と停止の関係
5. F# での列挙のシミュレーション
F# では、無限シーケンスを用いてチューリング機械による列挙をシミュレートできます。
例: 自然数の列挙
let naturals = Seq.initInfinite id // 0, 1, 2, 3, ... Seq.take 10 naturals |> Seq.toList // [0; 1; 2; 3; 4; 5; 6; 7; 8; 9]例: 素数の列挙
let isPrime n = if n < 2 then false else seq { 2 .. int(sqrt(float n)) } |> Seq.forall (fun x -> n % x <> 0) let primes = Seq.initInfinite id |> Seq.filter isPrime Seq.take 10 primes |> Seq.toList // [2; 3; 5; 7; 11; 13; 17; 19; 23; 29]7. 補足
- 列挙はあくまで「要素を出力する」ことであり、「順番に並べる」ことを必ずしも意味しません。
- 停止するたびに出力するので、無限に列挙を続けることができますが、すべての要素がいつか必ず出力される必要があります。
より詳しい証明や、他の例、F# でのさらなる実装などが必要でしたら教えてください!
チューリング機械が列挙することを帰納的関数で表すとどうなりますか
と入力すると以下の結果となりました。
チューリング機械が列挙するという概念を帰納的関数(または部分再帰関数)で表すには、以下のように考えます。
5. F# による実装例
F# でこれを無限シーケンスを使ってシミュレートできます。
自然数の列挙
let naturals = Seq.initInfinite id naturals |> Seq.take 10 |> Seq.toList // 出力: [0; 1; 2; 3; 4; 5; 6; 7; 8; 9]素数の列挙
let isPrime n = if n < 2 then false else seq { 2 .. int(sqrt(float n)) } |> Seq.forall (fun x -> n % x <> 0) let primes = Seq.initInfinite id |> Seq.filter isPrime primes |> Seq.take 10 |> Seq.toList // 出力: [2; 3; 5; 7; 11; 13; 17; 19; 23; 29]
帰納的集合ではない帰納的可算集合が存在することを対角線論法で示してください
と入力すると以下の結果となりました。


