相対性理論のパラドックスについて考えてみた

#概要
同僚から、相対性理論のパラドックスというものを教えてもらいました。

>相対性理論のパラドックス
『Aさんがロケットに乗って光速の98%の速さで地球から離れて行っているとする。今、地球にBさんがいて、Aさんを眺めているとする。Aさんから見るとBさんが離れて行っているので、アインシュタインの相対性理論によりBさんの時間は遅れる。
ところが、Bさんから見れば、Aさんの方が離れて行っているように見えるので、相対性理論によりAさんの時間も遅れる。
結局、どちらの時間も遅れるので、二人の時間に違いは起きない。』
![rocket.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1641177/0c65c5d2-a10d-74ba-23a1-78e562cdd9d2.jpeg)

これはもっともな意見だと思います。
一方で、ロケットあるいは飛行機に乗っている人の時計が、地上にいる人の時計より遅れることは実験により確かめられているそうです。

このパラドックスをどう説明すればよいのでしょうか？
自分なりに考えてみました。

#環境
Mac
Jupyter Notebook
Python3

#ロケットの縮小版

ロケットの話は想像しにくいので、まず身近にある例を使って考えてみます。

AさんとBさんがキャッチボールをしているとします。
ただし、Bさんは後ろ向きに秒速10メートルで移動し、Aさんから遠ざかっているとします。
つまりパラドックスで登場する**ロケットに乗って地球から遠ざかるの縮小版**です。
![catchball.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1641177/5a8daf8f-2c76-0a32-2f98-d6f7340f757f.jpeg)

今、二人の距離がきっかり100メートル離れた時にAさんとBさんがどちらも秒速20メートルでボールをお互いに向かって投げたとします。重力や空気抵抗を考えないとすると、Aさんの投げたボールがBさんに届くまでにかかる時間t秒は以下の式を解けば求められるはずです。

```math
20 \times t = 100 + 10 \times t
```

一方、Bさんはどうかというと、秒速10メートルで遠ざかりながら秒速20メートルでボールを投げていますが、この場合、実質的なボールの速度は、ボールの速度からBさんが遠ざかる速度を引いたものになります。そうするとBさんのボールは秒速10メートルで飛ぶことになります。つまりBさんのボールがAさんに届くまでにかかるT秒は、以下の式を解くことで求められます。

```math
(20 - 10) \times T = 100 
```
この場合は、tとTはどちらも10になります。つまりどちらのボールもきっかり10秒後に相手に届きます。
せっかくなので、AさんとBさんの距離や遠ざかるスピード、ボールの速度を変えて試せるよう関数を書いてみました。

```python
import math
# ボールがBさんに届くまでにかかる時間
def culcTimeToReachB(initDist, speedOfB, ballSpeed):
    
    time = initDist / (ballSpeed - speedOfB)
    return time

# ボールがAさんに届くまでにかかる時間
def culcTimeToReachA(initDist, speedOfB, ballSpeed):
    
    time = initDist / (ballSpeed - speedOfB)
    return time

t = culcTimeToReachB(100, 10, 20);
T = culcTimeToReachA(100, 10, 20);
print(t)
print(T)
```

関数をよく見てみると、ボールがBさんに届くまでにかかる時間の関数と、ボールがAさんに届くまでにかかる時間の関数はどちらも計算式が同じです。先程の２つの式をtまたはTについて解けるように整理すると同じ式になりました。
そうすると、まさにパラドックスの話にあるように、AさんとBさんはお互いに相手が動いているように見えるので、時間がどちらも遅れるという主張を裏付ける形になります。 

#ロケットの話

ではここで、最初のパラドックスで登場したロケットの話に戻りましょう。
Aさんがロケットに乗って光速の98%の速度で地球から離れて行っていて、地球にはBさんがいるのでした。
今、AさんとBさんの距離が300万kmになったところで、同時に光をお互いに向けて発射したとします。**先程のキャッチボールの拡大版**です。
![rocket_B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1641177/3c6f0961-1332-b1d4-eaf7-3bc38303aa41.png)

光の速さを30万kmとすると、Aさんの発射した光がBさんに届くまでにかかる時間t秒は、先程のキャッチボールの時のように以下の式を解けば求められるはずです。

```math
30 \times t = 300 + 30 \times 0.98 \times t
```
一方、Bさんの発射した光がAさんに届くまでにかかる時間は、キャッチボールの時のように下記の式で求められるのでしょうか？

```math
(30 - 30 \times 0.98) \times T = 300 
```
そうはなりません。なぜなら、**光には光源の運動状態に関わらず、真空中を常に一定の速度で伝播するという性質がある**からです。つまり、光の速度からBさんが遠ざかる速度を引くことはできません。
そうすると式は以下のようになります。

```math
30 \times T = 300 
```
では、これらの式を使ってtとTを求めてみましょう。

```python
import math
# 光がBさんに届くまでにかかる時間
def culcTimeToReachB(initDist, ratio):
    speedOfLight = 30
    time = initDist / (speedOfLight - speedOfLight * ratio)
    return round(time,1)

# 光がAさんに届くまでにかかる時間
def culcTimeToReachA(initDist):
    speedOfLight = 30
    time = initDist / speedOfLight
    return round(time,1)

t = culcTimeToReachB(300, 0.98);
T = culcTimeToReachA(300);
print(t)
print(T)
```
結果
500.0
10.0

Aさんの発射した光がBさんに届くには500秒かかります。
一方、Bさんの発射した光はわずか10秒でAさんに届きました！

これは明らかに変です。キャッチボールをしていた時には、二人の投げたボールは同時にお互いに届いていたのに、ボールを光に変えたとたん、同時に届かなくなりました。

どうしてこうなったのか考えてみると、**Bさんが自分自身の発射した光に対して動いていたことが原因**と思われます。そして光は常に一定の速さで進むため、キャッチボールの時のような同時性が失われてしまったのです。

アインシュタインの相対性理論では、この場合、Bさんの時間軸がAさんの時間軸と比べて傾いていると考えます。その傾きにより、発射した光が届く時間にずれが起こっているのです。
これはとてもイメージしにくいので、時空図を描いて考える必要がありますが、今回はスキップします。

Bさんの時間軸は傾いているので、AさんからみてBさんの時間は遅れる事になります。
Bさんの時間がどのくらい遅れるかは以下の変換式を使って求められるそうです。

```math
T = \frac{1}{\sqrt{1-(\frac{v}{c})^2 )}}t 
```

光速の98%で動いていた場合は、Aさんに比べてBさんの時間は約５倍くらい遅くなります。
なお、キャッチボールの例でも実はBさんの時間は遅れていましたが、Bさんの速度が光に比べて無視できるほど小さいので、遅れも無視できるほど小さく、問題になりませんでした。

#まとめ

パラドックスでは、AさんからするとBさんが動いているように見え、BさんからするとAさんが動いているように見えることが、どちらの時間も遅れるという根拠でしたが、実際は、自分自身が発射する光に対して動いているのはBさんだけなので、Bさんの時間だけが遅れる、という事になると考えられます。