【Python】√2の肩に無限に√2=2になる

# はじめに
これは、[Python Advent Calendar 2022](https://qiita.com/advent-calendar/2022/python)の9日目の記事となります。

たまにYouTubeチャンネル『予備校のノリで学ぶ「大学の数学・物理」』(略称：ヨビノリ)を観るのですが、面白そうなネタをやっていました。
大学の数学とありますが、幾つかの大学入試問題に出されているので高校生が解いています。

https://www.youtube.com/watch?v=LABUpfm-rF0


この動画を観たLisp大御所の笹川 賢一さんがLISPを使って試していました。

https://www.youtube.com/watch?v=TTclCyeKR1s


# Pythonに移植
Lispは分からないんですがやりたいことは理解したので、Google Colaboratoryを使えばPythonがすぐに使えますので移植してみました。

```py
import math
def root2():
  return math.sqrt(2)

def foo(n):
    if n == 0:
        return root2()
    else:
        return root2() ** foo(n-1)

print(foo(1))       # 1.632526919438153
print(foo(5))       # 1.926999701847101
print(foo(10))      # 1.988711773413954
print(foo(30))      # 1.9999926484999297
print(foo(50))      # 1.999999995181817
print(foo(100))     # 2.0000000000000004
```

繰り返す回数が多くなれば、2に近づいていきます。
動画ではなくテキストとして証明を知りたい方は下記サイトを参照してください。

http://indoctus2.blogspot.com/2015/03/2222.html

https://rikunora.hatenablog.com/entry/20090531/p1

では、3はどうでしょう？
証明的には駄目なのは分かっていますが、すぐに結果を確認できるのがプログラムのいいところ。

```py
import math
def root3():
  return math.sqrt(3)

def foo(n):
    if n == 0:
        return root3()
    else:
        return root3() ** foo(n-1)

print(foo(1))       # 2.5893999022603436
print(foo(2))       # 4.146950631027567
```

2回目で3の値を超えてしまいましたね。

では、4はどうでしょう？
動画内の証明でも特性方程式の解が2と4と言ってました。

```py
import math
def root4():
  return math.sqrt(4)

def foo(n):
    if n == 0:
        return root4()
    else:
        return root4() ** foo(n-1)

print(foo(1))       # 4.0
print(foo(2))       # 16.0
print(foo(3))       # 65536.0
```

1回目時点で$2^2$で4になります。そりゃ√4=2になるわけですからね。

# ChatGPTに答えを聞く
今話題にChatGPTはどう答えるでしょうか?
OpenAIでアカウントを作成してやってみました。

良さげな回答を得ようとしても質問が難しい、√2なのに2と勘違いされてしまう。
そこで日本語は一旦諦めて、英語で挑戦してみました。

## 英語
>Tell me result of  "(Square root of 2) power (square root of 2) power"
>
>The result is 2.

確かに答えはあってますが、なんか怪しい。
resultからanswerに切り替える。

>Tell me answer Of "1+1"
>
>The answer to 1+1 is 2.

どうも、無限のべき乗は「Infinite Power Tower」っていうらしい。

>Tell me answer of "Infinite Power Tower of the Square Root of 2"
>
>The Infinite Power Tower of the Square Root of 2 is an expression that is used to represent an infinite series of calculations, whereby the result of one calculation is raised to the power of the previous result. This expression can be written as: (√2)^√2^√2^√2^√2.....
>
>The answer to this expression is an irrational number, which cannot be expressed as an exact decimal value. However, the approximate value of this expression is 2.82842712475.

前半はいい感じですが、答えが2.82842712475と違っています。
これを、DeepLで日本語に翻訳してみました。

>2の平方根の無限べき乗塔とは、ある計算の結果を前の計算の結果のべき乗にすることで、無限の計算の連続を表すために使われる式である。この式は次のように書くことができる。(√2)^√2^√2^√2^√2.....
この式の答えは無理数であり、正確な10進数値で表すことはできない。しかし、この式の近似値は2.82842712475である。


## 日本語
「2の平方根の無限べき乗塔」というキーワードを得たので日本語に挑戦

>2の平方根の無限べき乗塔の答えを教えてください
>
>2の平方根の無限べき乗塔の答えは、2です。2は無限べき乗塔の最終的な結果として出てきます。
『無限べき乗塔』とは、数学的には、指数関数の形で表される無限層の乗塔を表します。それぞれの層において、上部の層に存在する値が、下部の層における値に指数関数的に拡大されるというものです。
その結果、最終的な答えとして2が出てきます。

素晴らしい答えが得られました。

# 最後に
数学ネタなので記事をパット見て閉じられてしまうからも知れませんので、Pythonの小ネタを書いておきます。

2017年に書いたこちらの記事ですが年表を掲載した手前、マメに更新しています。

https://qiita.com/yaju/items/5502115d7e3d06e6bbdd

調べるなかで、11月に[Lex Fridman](https://en.wikipedia.org/wiki/Lex_Fridman)氏がPythonの作者である Guido van Rossum氏にPython 4.0やEditorなどについてのインタビューした動画があります。
自分は自動翻訳して観ました。

https://www.youtube.com/watch?v=qC5Po77bfKI&list=RDCMUCJIfeSCssxSC_Dhc5s7woww&start_radio=1&rv=qC5Po77bfKI&t=1