『笑わない数学 - NHK』で超越数の話があったとき調べてみましたが、超越数を構成する方法はプログラミング言語の無限長リストを構成する方法に似ているといえば似ています。そこで ChatGPT で調べてみました。
プログラミング言語の無限長リストと超越数とは関係がありますか
と入力すると以下の結果となりました。
無限長リスト(ストリーム)と超越数の関係は、ある意味では深く、ある意味では間接的です。具体的には、無限長リストを数列とみなすことで、超越数を構成したり、無限の情報を扱う手法として捉えることができます。
1. 無限長リスト(ストリーム)とは?
プログラミング言語では、無限長リスト(ストリーム)は遅延評価を用いて実装されることが多いです。たとえば、Haskell や F# では、次のように無限に続くリストを定義できます:
Haskell の例:
ones :: [Integer] ones = 1 : ones -- 1が無限に続くリストF# の例:
let rec ones = seq { yield 1; yield! ones }これにより、有限のメモリしか持たないコンピュータ上で、無限のデータを扱うことができます。
2. 超越数とは?
超越数とは、有理数係数の代数方程式の解にならない実数のことです。有名な超越数には、π(円周率) や e(ネイピア数) があります。これらは無限桁の小数展開を持ち、決して循環しません。
3. 無限長リストと超越数の関係
無限長リストは、超越数の小数展開を記述するために使えます。たとえば、π の小数展開を無限長リストとして表現できます。
4. 計算の観点からの関係
超越数は有限の規則で完全に記述することが困難ですが、無限長リストは遅延評価を使うことで、有限の規則から無限の数列を生成できます。
例えば、e を次のような級数展開で表せます:
この無限級数をストリームとして定義すれば、e の近似値を求めることができます。factorialStream :: [Integer] factorialStream = scanl (*) 1 [1..] eStream :: [Double] eStream = scanl (+) 1 (map (1 /) (map fromIntegral factorialStream))これにより、超越数の桁を順に計算し続けることが可能になります。





