儀鳳暦のマジックナンバー1340の謎を解く(3)李淳風は調日法を本当に使用したのか？

# はじめに

儀鳳暦（中国では麟徳暦）は一太陽年および一朔望月を定義する分数を1340という共通分母によって定義した。

- 一太陽年＝489428／1340＝365.2448日
- 一朔望月＝39571／1340＝29.53060日

この共通分母1340の由来についてはまず下記の記事を参照されたい。

https://qiita.com/TETSURO1999/items/2d8201f2d0b7fd96a60d

このうち一朔望月については「調日法」と呼ばれる繰り返し計算手法を用いて求めたという結論を導いた。ただし，この結論は筆者オリジナルのものではなく，あくまで参考文献[1]の記述によるが，それも著者の薮内清氏の独自意見ではなく，あくまで清の李鋭（1769～1817）の日法朔余強弱攷(考)によるものだ。

また一太陽年については，参考文献[1]では実績のある過去の暦法の値を流用したのではないかという見解を述べている一方，参考文献[2]では古代中国の多くの暦法が一太陽年と一朔望月の比を「調日法」を用いて求めたのではないかと分析している。

さて，どちらが正しいのであろうか？

# 本当に調日法を使用したのか？

試しに「令和暦」というものを作ってみよう。共通分母はコンピュータで計算し易いように２のべき乗2¹²＝4096とし，一太陽年および一朔望月は国立天文台掲載の値を採用するとして

- 一太陽年を定義する分数の分子＝365.2422日×4096＝1496032
- 一朔望月を定義する分数の分子＝29.53059日×4096＝120957.3～120957

となるので，一太陽年および一朔望月の定義式は

- 一太陽年＝1496032／4096
- 一朔望月＝120957／4096

となる。ここで一朔望月および一太陽年／一朔望月の定義式はいずれも見事に調日法を使ったとされる形式に収まってしまうのだ。

```math
\begin{aligned}
\textsf{一朔望月} &= \frac{120957}{4096}
= 29 \frac{2173}{4096}
= 29 + \frac{9 \times 19 + 26 \times 77}{17 \times 19 + 49 \times 77} \\
\frac{\textsf{一太陽年}}{\textsf{一朔望月}} &= \frac{1496032}{120957}
= 12 \frac{44578}{120957}
= 12 + \frac{4 \times 287 + 7 \times 6200}{11 \times 287 + 19 \times 6200}
\end{aligned}
```

あれれ？おかしいぞ？令和暦の策定には「調日法」を使っていないにも関わらず，「調日法」を使用したという形式になってしまった。これってもしかしたらどんな分数でも「調日法」を使用した形になるのではないか？

# 問題の定式化

正の有理数である下限値 $a/b$ と上限値 $c/d$ の範囲内にある任意の有理数 $x/y$ について考える。

```math
0 < \frac{a}{b} < \frac{x}{y} < \frac{c}{d} \tag{1}
```

ここで有理数 $x/y$ は自然数 $p$，$q$ を用いて＊必ず＊次の形で表すことができるか？という問題に帰着される。

```math
\frac{x}{y} = \frac{ap + cq}{bp + dq} \tag{2}
```

式は一つしかないのに未知数は $p$，$q$ の二つあるので，一般的にこれを解くことができないように思える。すなわち $x$ と $y$ には特別な関係が必要なように見えるのだ。

# 証明

だがしかし，任意の有理数 $x/y$ について式$(2)$を満たす自然数 $p$，$q$ は＊必ず＊存在することを示す。式$(2)$の右辺の分母・分子を $q$ で割る。

```math
\frac{x}{y} = \frac{a \left( \displaystyle \frac{p}{q} \right) + c}{b \left( \displaystyle \frac{p}{q} \right) + d} \tag{3}
```

$r = p/q$ とおく。

```math
\frac{x}{y} = \frac{ar + c}{br + d} \tag{4}
```

両辺に $y(br + d)$ をかける。

```math
x(br + d) = y(ar + c) \tag{5}
```

$r$ を含む項を左辺にまとめる。

```math
(bx - ay)r = cy - dx \tag{6}
```

$r$ について求める。

```math
r = \frac{cy - dx}{bx - ay} = \frac{p}{q} \tag{7}
```

これより $cy - dx$ と $bx - ay$ が互いに素であれば 

```math
\left\{ \begin{aligned}
p &= cy - dx \\
q &= bx - ay
\end{aligned} \right. \tag{8}
```

となる。互いに素でない場合はそれらの最大公約数を $g$ とおき，

```math
\left\{ \begin{aligned}
p &= (cy - dx)/g \\
q &= (bx - ay)/g
\end{aligned} \right. \tag{9}
```

とおけば良い。なお式$(1)$より $p > 0$ かつ $q > 0$ となる。

# 結論

下限値 $a/b$ と上限値 $c/d$ の範囲にある分数 $x/y$ が

```math
\frac{x}{y} = \frac{ap + cq}{bp + dq}
```

という形で表すことができるからといって「調日法」を用いたとは言えない。もともと「調日法」は簡素な近似分数を得るための計算手法なのだから，得られた分数がある程度簡素（せめて $p$ が一桁程度）であれば「調日法」を用いた可能性が高いが，$q$ が四桁になってしまうと別の計算方法で求めたものと思われる。

以下，隋唐時代の十暦の一朔望月および一太陽年／一朔望月を示す。このうち<b>「調日法」を使っていないと思われるもの</b>を灰色とし，<b>真偽不明のもの</b>は黄色で示す。

```plantuml
<style>
root {
  padding: 0;
  margin: 0;
}
title {
  fontStyle: normal;
  fontSize: 18;
}
</style>
skinparam padding 12
title
表１　隋唐時代の十暦
<#FFFFFF,#CCCCCC>|=暦法|=　　　　一朔望月|=　　一太陽年／一朔望月|
|\n開皇\n|<#EEEEEE><math>29+(9*(-1)+26*3713)/(17*(-1)+49*3713)</math>|<math>12+(4+7*22)/(11+19*22)</math>|
|\n皇極\n|<math>29+(9+26*25)/(17+49*25)</math>|<math>12+(4+7*35)/(11+19*35)</math>|
|\n大業\n|<math>29+(9+26*23)/(17+49*23)</math>|<math>12+(4+7*21)/(11+19*21)</math>|
|\n戊寅\n|<math>29+(9*7+26*263)/(17*7+49*263)</math>|<math>12+(4+7*35)/(11+19*35)</math>|
|\n麟徳\n|<math>29+(9+26*27)/(17+49*27)</math>|<#EEEEEE><math>12+(4*53+7*2052)/(11*53+19*2052)</math>|
|\n大衍\n|<math>29+(9*3+26*61)/(17*3+49*61)</math>|<#EEEEEE><math>12+(4*4645+7*33067)/(11*4645+19*33067)</math>|
|\n五紀\n|<math>29+(9+26*27)/(17+49*27)</math>|<#EEEEEE><math>12+(4*53+7*2052)/(11*53+19*2052)</math>|
|\n正元\n|<#FFFFEE><math>29+(9+26*22)/(17+49*22)</math>|<#FFFFEE><math>12+(4+7*39)/(11+19*39)</math>|
|\n宣明\n|<math>29+(9*7+26*169)/(17*7+49*169)</math>|<#EEEEEE><math>12+(4*350+7*12853)/(11*350+19*12853)</math>|
|\n崇玄\n|<math>29+(9*13+26*271)/(17*13+49*271)</math>|<#EEEEEE><math>12+(4*586+7*20643)/(11*586+19*20643)</math>|
end title
```

１）開皇暦
隋初に用いられた開皇暦は一太陽年／一朔望月にのみ「調日法」を用いたと考える。

２）皇極暦から戊寅暦まで
麟徳暦より前の暦法は一太陽年と一朔望月の定義分数の分母が異なるため設定自由度を持つ。このため一朔望月および一太陽年／一朔望月の両方とも「調日法」を用いたのではないかと考える。

３）麟徳暦以降の暦法
麟徳暦以降の暦法は一太陽年と一朔望月の定義分数を共通分母としたため，一朔望月および一太陽年／一朔望月の双方に「調日法」を用いることは難しいと思われる。ただし「調日法」を全く使わないとなると共通分母の算出根拠が不明となるため，少なくとも一朔望月のほうは「調日法」を用いたのではないかと考える。

なお，正元暦だけはどうやって作ったのか分からない。

# 一太陽年の計算方法

それでは麟徳暦以降の暦法では一太陽年を定義する分数をどのようにして求めたのであろうか？というと文献[1]では実績のある過去の暦法の値を流用したのではないかと説いている。たとえば麟徳暦の一太陽年の定義式は489428／1340であるが，分子489428を四捨五入して求めたのであれば，丸め込んだ端数部分±0.5だけ計算根拠となった一太陽年の観測値は幅を持てることになる。

```math
\frac{489428 \pm 0.5}{1340} = 365.24440 \sim 365.24515\,\textsf{日}
```

麟徳暦以降の暦法について，同様に一太陽年観測値の取りうる範囲を求めた。

<table>
<caption>表２　一太陽年観測値の範囲</caption>
<thead>
<tr><th rowspan="2" style="text-align:center">暦法</th>
    <th rowspan="2" style="text-align:center">分子<br>（変動範囲）</th>
    <th rowspan="2" style="text-align:center">共通分母</th>
    <th colspan="2" style="text-align:center">一太陽年観測値</th></tr>
    <tr><th style="text-align:center">最小値</th>
    <th style="text-align:center">最大値</th></tr>
</thead>
<tbody>
<tr><td>麟徳</td>
    <td style="text-align:right">489428±0.5</td>
    <td style="text-align:right">1340</td>
    <td style="text-align:right">365.24440日</td>
    <td style="text-align:right">365.24515日</td></tr>
<tr><td>大衍</td>
    <td style="text-align:right">1110343±0.5</td>
    <td style="text-align:right">3040</td>
    <td style="text-align:right">365.24424日</td>
    <td style="text-align:right">365.24457日</td></tr>
<tr><td>五紀</td>
    <td style="text-align:right">489428±0.5</td>
    <td style="text-align:right">1340</td>
    <td style="text-align:right">365.24440日</td>
    <td style="text-align:right">365.24515日</td></tr>
<tr><td>正元</td>
    <td style="text-align:right">399943±0.5</td>
    <td style="text-align:right">1095</td>
    <td style="text-align:right">365.24429日</td>
    <td style="text-align:right">365.24521日</td></tr>
<tr><td>宣明</td>
    <td style="text-align:right">3068055±0.5</td>
    <td style="text-align:right">8400</td>
    <td style="text-align:right">365.24458日</td>
    <td style="text-align:right">365.24470日</td></tr>
<tr><td>崇玄</td>
    <td style="text-align:right">4930801±0.5</td>
    <td style="text-align:right">13500</td>
    <td style="text-align:right">365.24448日</td>
    <td style="text-align:right">365.24456日</td></tr>
</tbody>
</table>

残念ながら六暦全てを満たす値は存在しないが，宣明暦を除く五暦の重なる狭い範囲にちょうど皇極暦の値が位置する。

```plantuml
@startuml
<style>
root {
  padding: 0;
  margin: 0;
}
caption {
  fontSize: 16;
}
</style>
sprite FIGURE <svg width="550" height="350" viewbox="0 0 550 350">
<text x="55"  y="340"  font-size="16" fill="black">365.24425</text>
<text x="155" y="340"  font-size="16" fill="black">365.24450</text>
<text x="255" y="340"  font-size="16" fill="black">365.24475</text>
<text x="355" y="340"  font-size="16" fill="black">365.24500</text>
<text x="455" y="340"  font-size="16" fill="black">365.24525</text>
<path d="M100 30 v290 h1 v-290" fill="lightgray" />
<path d="M200 30 v290 h1 v-290" fill="lightgray" />
<path d="M300 30 v290 h1 v-290" fill="lightgray" />
<path d="M400 30 v290 h1 v-290" fill="lightgray" />
<path d="M500 30 v290 h1 v-290" fill="lightgray" />
<text x="10" y="56"  font-size="16" fill="black">麟徳暦</text>
<text x="10" y="106" font-size="16" fill="black">大衍暦</text>
<text x="10" y="156" font-size="16" fill="black">五紀暦</text>
<text x="10" y="206" font-size="16" fill="black">正元暦</text>
<text x="10" y="256" font-size="16" fill="black">宣明暦</text>
<text x="10" y="306" font-size="16" fill="black">崇玄暦</text>
<path d="M161.2 45  h298.5 v10 h-298.5" fill="red" />
<path d="M97.4  95  h131.6 v10 h-131.6" fill="red" />
<path d="M161.2 145 h298.5 v10 h-298.5" fill="red" />
<path d="M116.9 195 h365.3 v10 h-365.3" fill="red" />
<path d="M233.3 245 h47.6  v10 h-47.6"  fill="red" />
<path d="M192.6 295 h29.6  v10 h-29.6"  fill="red" />
<text x="210" y="24" font-size="16" fill="blue">▼皇極暦365.24454</text>
<path d="M217.5 30 v290 h1 v-290" fill="blue" />
</text>
</svg>
title <$FIGURE>
caption 図１　一太陽年の観測値の取りうる範囲
@enduml
```

# 考察

古代中国では頻繁に改暦が行われた。それが「受命改制」の思想によるものとしても一王朝で一暦であるべきだ。ところが隋唐時代には一世一暦のペースで頻繁に改暦が行われた。おそらく，そんなに短期間では理論面でも観測技術においても飛躍的な進歩を望めないはずである。にも関わらず，前暦の常数をそのまま使用することは許されなかったのだろう。

「調日法」の手順に沿って計算を繰り返していくと次第に飽和してきて実数としては殆ど値が変わらなくなるが，新たな分数は次々と得られる。つまり実質的にほぼ同じ値であるが，見かけ上異なる分数を得るために「調日法」を使ったのではないかと考えている。ただし，一朔望月の計算のみ。

一方，一太陽年のほうは評価の高い皇極暦の値をそのまま，あるいは微調整したうえで新たな共通分母に応じて計算し直しただけではないかと思う。

```plantuml
@startuml
<style>
root {
  margin: 0;
  padding: 0;
}
title {
  fontStyle: normal;
  fontSize: 16;
}
</style>
sprite FIGURE <svg width="360" height="800" viewbox="0 0 360 800">
<path d="M50  52 h100 v75  h-100" fill="#FFCCCC">
<path d="M50 126 h100 v579 h-100" fill="#FFFFCC">
<path d="M50 704 h100 v33  h-100" fill="#CCFFCC">
<path d="M50 736 h100 v27  h-100" fill="#FFCCFF">
<path d="M50 762 h100 v21  h-100" fill="#CCCCFF">
<g fill="black">
<path d="M10  30 h340 v1 h-340" >
<path d="M50  10 v780 h1 v-780" >
<path d="M150 10 v780 h1 v-780" >
<path d="M250 10 v780 h1 v-780" >
<path d="M350 10 v780 h1 v-780" >
<path d="M50   52 h100 v1 h-100">
<path d="M50  126 h100 v1 h-100">
<path d="M50  704 h100 v1 h-100">
<path d="M50  736 h100 v1 h-100">
<path d="M50  762 h100 v1 h-100">
<path d="M50  782 h100 v1 h-100">
<path d="M150  52 h100 v1 h-100">
<path d="M150  98 h100 v1 h-100">
<path d="M150 126 h100 v1 h-100">
<path d="M150 143 h100 v1 h-100">
<path d="M150 188 h100 v1 h-100">
<path d="M150 256 h100 v1 h-100">
<path d="M150 258 h100 v1 h-100">
<path d="M150 270 h100 v1 h-100">
<path d="M150 300 h100 v1 h-100">
<path d="M150 310 h100 v1 h-100">
<path d="M150 314 h100 v1 h-100">
<path d="M150 402 h100 v1 h-100">
<path d="M150 414 h100 v1 h-100">
<path d="M150 448 h100 v1 h-100">
<path d="M150 500 h100 v1 h-100">
<path d="M150 530 h100 v1 h-100">
<path d="M150 538 h100 v1 h-100">
<path d="M150 542 h100 v1 h-100">
<path d="M150 570 h100 v1 h-100">
<path d="M150 582 h100 v1 h-100">
<path d="M150 610 h100 v1 h-100">
<path d="M150 636 h100 v1 h-100">
<path d="M150 666 h100 v1 h-100">
<path d="M150 698 h100 v1 h-100">
<path d="M150 704 h100 v1 h-100">
<path d="M150 704 h100 v1 h-100">
<path d="M150 714 h100 v1 h-100">
<path d="M150 716 h100 v1 h-100">
<path d="M150 736 h100 v1 h-100">
<path d="M150 742 h100 v1 h-100">
<path d="M150 756 h100 v1 h-100">
<path d="M150 758 h100 v1 h-100">
<path d="M150 762 h100 v1 h-100">
<path d="M150 774 h100 v1 h-100">
<path d="M150 782 h100 v1 h-100">
<path d="M250  58 h100 v1 h-100">
<path d="M250  84 h100 v1 h-100">
<path d="M250 128 h100 v1 h-100">
<path d="M250 220 h100 v1 h-100">
<path d="M250 348 h100 v1 h-100">
<path d="M250 414 h100 v1 h-100">
<path d="M250 458 h100 v1 h-100">
<path d="M250 504 h100 v1 h-100">
<path d="M250 534 h100 v1 h-100">
<path d="M250 676 h100 v1 h-100">
<path d="M250 766 h100 v1 h-100">
</g>
<text x="13"  y="25" fill="black" font-size="16">西暦</text>
<text x="85"  y="25" fill="black" font-size="16">王朝</text>
<text x="185" y="25" fill="black" font-size="16">皇帝</text>
<text x="285" y="25" fill="black" font-size="16">暦法</text>
<text x="15" y="58"  fill="black" font-size="16">581</text>
<text x="15" y="132" fill="black" font-size="16">618</text>
<text x="15" y="710" fill="black" font-size="16">907</text>
<text x="15" y="742" fill="black" font-size="16">923</text>
<text x="15" y="768" fill="black" font-size="16">936</text>
<text x="15" y="788" fill="black" font-size="16">946</text>
<text x="93" y="95"  fill="black" font-size="16">隋</text>
<text x="93" y="422" fill="black" font-size="16">唐</text>
<text x="85" y="726" fill="black" font-size="16">後梁</text>
<text x="85" y="756" fill="black" font-size="16">後唐</text>
<text x="85" y="779" fill="black" font-size="16">後晋</text>
<text x="175" y="81"  fill="black" font-size="16">楊　堅</text>
<text x="175" y="118" fill="black" font-size="16">楊　広</text>
<text x="175" y="141" fill="black" font-size="16">李　淵</text>
<text x="175" y="172" fill="black" font-size="16">李世民</text>
<text x="175" y="228" fill="black" font-size="16">李　治</text>
<text x="175" y="291" fill="red"   font-size="16">武　照</text>
<text x="175" y="364" fill="black" font-size="16">李隆基</text>
<text x="175" y="437" fill="black" font-size="16">李　豫</text>
<text x="175" y="480" fill="black" font-size="16">李　适</text>
<text x="175" y="521" fill="black" font-size="16">李　純</text>
<text x="175" y="561" fill="black" font-size="16">李　昂</text>
<text x="175" y="601" fill="black" font-size="16">李　忱</text>
<text x="175" y="629" fill="black" font-size="16">李　漼</text>
<text x="175" y="657" fill="black" font-size="16">李　儇</text>
<text x="175" y="688" fill="black" font-size="16">李　曄</text>
<text x="275" y="78"  fill="black" font-size="16">開皇暦</text>
<text x="275" y="112" fill="black" font-size="16">大業暦</text>
<text x="275" y="180" fill="black" font-size="16">戊寅暦</text>
<text x="275" y="290" fill="black" font-size="16">麟徳暦</text>
<text x="275" y="387" fill="black" font-size="16">大衍暦</text>
<text x="275" y="442" fill="black" font-size="16">五紀暦</text>
<text x="275" y="488" fill="black" font-size="16">正元暦</text>
<text x="270" y="525" fill="black" font-size="16">(観象暦)</text>
<text x="275" y="611" fill="black" font-size="16">宣明暦</text>
<text x="275" y="726" fill="black" font-size="16">崇玄暦</text>
</svg>
title
<$FIGURE>
図２　隋唐時代の歴代皇帝と暦法
end title
@enduml
```

参考文献[1]に一世一暦と書いてあったのでその表現をそのまま用いたが，図２を描いてみたらさすがにそれは言い過ぎだったようだ。

:::note
武照とは武則天（則天武后）のこと。一時期，唐に代わり武周朝を建てた。参考文献[1]によれば武周朝末期に神龍暦を定めたが未実施とのこと。観象暦は記録が残っておらず詳細不明。
:::

# 次回

次回に続く。

https://qiita.com/TETSURO1999/items/3b13ea885d88279bb53c


# 参考文献
[1] 藪内清著作集　第２巻 漢書律暦志の研究／隋唐暦法史の研究，臨川書店，2018年9月
[2] [曲安京「祖沖之は、如何に円周率π=355/113を得たか？」数理解析研究所講究録1257巻，2002年 <img width=16 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490655/66e66c9d-a6f3-f215-951a-9d79cc94a9d6.png">](https://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1257-14.pdf)
[3] [国立天文台＞暦計算室＞暦Wiki＞季節のめぐる周期](https://eco.mtk.nao.ac.jp/koyomi/wiki/B5A8C0E12FB5A8C0E1A4CEA4E1A4B0A4EAA4CEBCFEB4FC.html)
[4] [国立天文台＞暦計算室＞暦Wiki＞月の周期　月の公転](https://eco.mtk.nao.ac.jp/koyomi/wiki/BCFEB4FC2FB7EE.html)