自分が生まれた日の曜日は、カレンダーアプリに日付を打つだけで一発で出る。当たり前すぎて、それが「計算」だってことすら意識しない。
で、ふと思った。「イエスが生まれた日は何曜日だったんだろう」。曜日って結局、日付から一意に決まる数字のはずだから、余裕のつもりで調べ始めた。
楽勝だと思ってた
曜日は占いでも感覚でもない。基準の日から数えた日数を7で割った余りで、機械的に一意に決まる(実際、日付から曜日を出す「ツェラーの公式」とか「ドゥームズデー・アルゴリズム」みたいな、名前付きの計算手順がちゃんと存在する)。だから「12月25日でしょ、去年の12/25の曜日から数えれば終わる話だ」くらいの気持ちで始めた。
数分で詰んだ。詰まった場所が3つあって、どれも「計算」じゃなく「そもそも何を入れるか」の方だった。
詰みポイント①:どの暦の12月25日か
「12月25日」と言った瞬間、それがユリウス暦なのかグレゴリオ暦なのかを決めないと、計算のスタートラインが無い。グレゴリオ暦は1582年に切り替わった暦で、それより前はずっとユリウス暦だった。同じ「12月25日」という日付ラベルでも、どっちの暦の上の話かで、対応する実際の日がズレる。
大安が「旧暦のどの日か」で決まる話(旧暦の月日をmod 6する話)を前に調べたけど、今回はそれの前段、「そもそもどの暦を使うか」から揉めてる。
詰みポイント②:12月25日、そもそも記録にない
12月25日という日付自体、当時の記録に基づくものではなく、のちの教会が定めたという説が有力らしい(このあたりは資料が薄く、断定はしない)。誕生の記録に「何月何日」の記載はなく、後から特定の日付が割り当てられた、という順番。だとすると入れる日付自体が、最初から”決めごと”だったことになる。
詰みポイント③:誕生年もそもそも1つに決まってない
さらに、誕生年そのものも西暦1年ではなく、紀元前6〜4年ごろという説が一般的らしい(ヘロデ王が亡くなった年が手がかりになっているそう)。「ごろ」としか言えない時点で、年という入力値からしてブレてる。
で、確かめてたら手元のPythonが怒った
年の話でもうひとつ気になって、実際にPythonで日付を作ってみた。
>>> from datetime import date
>>> date(0, 12, 25)
ValueError: year 0 is out of range
西暦には0年が無い。 紀元前1年の次はいきなり紀元1年で、その間に0年は挟まらない。西暦(A.D.)という数え方自体を6世紀ごろに考えた人(ディオニュシウス・エクシグウスという人らしい)が、0年を作らなかったからだそう。1000年以上あとに生まれたプログラミング言語まで、律儀にその仕様を引き継いでる。しょうもない話だけど、律儀すぎてちょっと笑った。
曜日の計算、得意なつもりだった。
……得意なのは計算だけで、「そもそも何年の話か」を決める方は全然得意じゃなかった。
で、これの何が面白いか
曜日そのものは、日付が決まればmod 7で完全に決定論的に出る。これは本物で、揺るがない。
でも「イエスの誕生日は何曜日だった」って言い切ろうとした瞬間、揉めるのは計算じゃなく、①どの暦か ②どの日付か ③どの年か、という3つの入力値の方だった。どれも「諸説」の域を出ない。計算式は正しいのに、入れる数字がそもそも1個に決まってない。
……計算自体は5分で終わった。詰んだのは前提の方。数字は嘘をつかない。でも「入れる数字」を隠したまま答えだけ言い切ると、それはもう計算じゃなくて、前提の方を勝手に1つ選んだ、というだけの話になる。