本記事の内容
本記事は中間値の定理の証明を与える記事です。
本記事を読むに当たり関数の連続性と区間縮小法を知っている必要があるため、その際は以下の記事を参照してください。
では、まずは中間値の定理のイメージを復習しましょう。
中間値の定理のイメージの復習
中間値の定理はどういうイメージだったかというと、

ということでした。
詳しくは【解析学の基礎シリーズ】関数の極限編 その13を参照してください。
実は、中間値の定理の主張はもう少し広いです。
「どういうことか?」というと、「x軸と少なくとも1回は交わる。」という部分の主張がもう少し広いです。
要は、x軸、すなわちy=0と交わるということを「y=Dと少なくとも1回は交わる。」という主張に直すことができます。
つまりは上下(y軸方向)に平行移動したということです。
図とともに説明します。
とどのつまり、こういうことです。

まさに、前回述べた中間値の定理を上下に平行移動した主張になっています。
前回述べたイメージはD=0の場合だった、というわけです。
今回は、y=Dの場合を証明していきます。
では、中間値の定理とは何か、ということを明示します。
中間値の定理の明示

次にどういう発想で証明するかを説明します。
証明をするための発想
筆者は最初にこの定理を知ったとき、「当たり前じゃね?」と思いました。
「そりゃあ連続なら交わるでしょうよ」と思いました。
また同時に「どうすんだよ」とも思いました。
しかし、図を描いてみて「この主張は直感的には成り立つよね。ということは、この主張はf(x)=Dという方程式の解xを求めろってことじゃないか?」
と思ったわけです。
示すことはf(d)=Dとなるようなd∈(a,b)の存在です。
つまり、どのようにdを見つけるのか、というアルゴリズムを提示することで証明が完了します。
ここで、「c∈[a,b]を任意に取ってきて、f(c)<Dだったらば、f(c)がDに近づくようにc+ϵ(ちょっとずらしてDに近づける、という意味)の値を考えて、f(c)>Dだったらばf(c)がDに近づくようにc−ϵ(ちょっとずらしてDに近づける、という意味)の値を考える。という操作を繰り返していけばdが求まるんじゃないか?」と思ったわけです。
(コンピュータで方程式を解くときはこのようにして解くんじゃないかな、なんて思ったりしてます。)
ここで、この発想に至ったらば、「もしかしてもしかすると、だな。まさか区間縮小区法が使えるんじゃないか?」と思えるわけです。
「だって、区間縮小法はどんどん区間を狭めてって収束先を見つける手法なんだからf(d)=Dに収束するdを見つけることと似てるじゃんね。」というわけです。
ネタバラシすると、中間値の定理の証明方法はいくつかあります。
筆者と同じ発想で区間縮小法で証明する方法もあれば、ワイエルシュトラスの上限公理を使った証明方法もあります。
本記事では区間縮小法を使った証明を紹介します。
いざ、証明
証明に際して、区間縮小法が使えそうだ、と思っているわけですから、「どうやって縮小する区間(どんどん小さくなる区間)を作るんだ?」ということが肝になってきます。
むしろこの区間を作ってしまえばおしまいです。
区間縮小法は何だったかと言うと、
- 任意のInに含まれる実数が存在する。すなわち ⋂n∈NIn≠∅,
- 特に、In=[an,bn]として、limn→∞(bn−an)=0であれば(すなわち、区間がどんどん小さくなっていけば)、共通部分は一点αのみからなる集合である。すなわち、 ⋂n∈NIn={α} である。このとき、 limn→∞an=limn→∞bn=α である。
でした。
以前区間縮小法を使った証明にはデデキントの定理やらボルツァーノ-ワイエルシュトラスの定理がありました。
これらはアルキメデスの原理を追加することで同値な定理ですが、主張としては別です。
しかし、どのように区間縮小法を使うのか、ということについては同じです。
与えられた区間の中のある点を目指して長さを半分ずつにしていくことで、どんどん小さくなる区間(縮小する区間)の列と数列を作りました。
今回もこの発想でできるのではないか?ということでやってみます。
(あくまで予想です。)
「マネしてやってみよう!」というわけです。
では行きましょう。
(証明の流れ)
- (ステップ1):デデキントの定理の証明やボルツァーノ-ワイエルシュトラスの定理を証明するときと同じような縮小する区間を作る。
- (ステップ2):区間縮小法から縮小する区間はある一点だけの集合になる。
- (ステップ3):その一点が求めたいdであることを示す。
中間値の定理の証明
(ステップ1):デデキントの定理の証明やボルツァーノ-ワイエルシュトラスの定理を証明するときと同じような縮小する区間を作る。
関数f:[a,b]→Rが[a,b]で連続であるとします。
どんどん小さくなる区間の列を作りたいということを念頭に置きます。
このとき、f(a)<D<f(b)を満たす任意のD∈Rに対して、数列{an}n∈Nと{bn}n∈Nを以下のように決めます。
※文章だとわかりにくいかもしれないので、その際はまず以下の文章の後にある図を見てから、下記の文章を読んでみてください。
①n=1のとき、a1=a、b1=bとします。
どんどん小さくなる区間を作りたいので、まずは区間の端っこを使った一番大きい区間を作るためです。
このとき、b1−a1=b−aです。
a1=a、b1=bであり、尚かつf(a)<D<f(b)ですから、
f(a1)<D<f(b1)
が成り立ちます。
②n=2のとき、a2とb2を次のように決めます。
- f(a1+b12)<Dのとき
{a2=a1+b12b2=b1
とします。
このとき、f(a1+b12)=f(a2)<Dが成り立ちます。 - f(a1+b12)>Dのとき
{a2=a1b2=a1+b12
とします。
このとき、f(a1+b12)=f(b2)>Dが成り立ちます。
このようにすることで、[a,b]よりも小さく小さい区間を作ることができ、さらにはf(d)=Dを満たすdに近づきます。
1.の場合、2.の場合のいずれであっても
b2−a2=12(b1−a1)=12(b−a)
が成り立ちます。
さらに、
f(a2)<D<f(b2)
が成り立ちます。
もし仮にf(a1+b12)=Dであったのなら、
d=a1+b12
ということが分かるので、証明はおしまいです。

①、②と同じ手続きで数列{an}n∈Nと{bn}n∈Nを決めます。(本質的には数列を決めるというより、その数列の値を端点とする区間を決めることになります。)
③n=nのとき
- f(an−1+bn−12)<Dのとき
{an=an−1+bn−12bn=bn−1
とします。
このとき、f(an−1+bn−12)=f(an)<Dが成り立ちます。 - f(an−1+bn−12)<Dのとき
{an=an−1bn=an−1+bn−12
とします。
このとき、f(an−1+bn−12)=f(bn)>Dが成り立ちます。 - f(an−1+bn−12)=Dのとき
d=an−1+bn−12とすることで証明が終わります。
このときも、先と同じで1.、2.、3.の場合のうち3.の場合は既に証明が終わっていることになるので、1.、2.のいずれの場合出会ったとしても、
bn−an=12(bn−1−an−1)=12n−1(b−a)
が成り立ちます。
さらに、
f(an)<D<f(bn)
が成り立ちます。
さて、これで数列{an}n∈Nと{bn}n∈Nの値を端点とする縮小する区間が作れてような気がします。
しかし、まだ「ような気がする」だけであって、本当に縮小するのかどうかを考えなければなりません。
つまり、{an}n∈Nが単調増加数列で{bn}n∈Nが単調減少数列であることを確かめなければなりません。
「いやいや。縮小するように作ったんだからそりゃそうでしょ。」と思うかもしれませんが、確認してみましょう。
まずは{an}n∈Nが単調増加数列かどうかです。
- f(an−1+bn−12)<Dのとき
an=an−1+bn−12です。
このとき、
an−an−1=(bn−1−an−1)2=12n−1(b−a)
です。
任意のn∈Nに対して、12n−1>0で、かつb−a>0ですので、12n−1(b−a)>0です。 - f(an−1+bn−12)>Dのとき
an=an−1です。
従って、任意のn∈Nでan≥an−1ですので、{an}n∈Nは単調増加数列です。
次に{bn}n∈Nが単調減少数列かどうかです。
- f(an−1+bn−12)<Dのとき
bn=bn−1です。 - f(an−1+bn−12)>Dのとき
bn=an−1+bn−12です。
このとき、
bn−bn−1=(an−1−bn−1)2=−12n−1(b−a)
です。
任意のn∈Nに対して、12n−1>0で、かつb−a>0ですので、−12n−1(b−a)<0です。
従って、任意のn∈Nでbn≤bn−1ですので、{bn}n∈Nは単調減少数列です。
これでようやく、「数列{an}n∈Nと{bn}n∈Nの値を端点とする縮小する区間が作れた。」と断言できます。
さらに、bn−an=12n−1(b−a)ですので、
limn→∞(bn−an)=limn→∞12n−1(b−a)=0
(ステップ2):区間縮小法から縮小する区間はある一点だけの集合になる。
さて、これで区間縮小法の仮定を満たしたことになります。
つまり、
limn→∞an=limn→∞bn=α
というα∈Rが存在します。
もともとは縮小する区間を作ってどんどん範囲を狭めることによってdを見つけたいな、という話でしたので、もしこのαがdの正体であれば嬉しいわけです。
というか証明が終わります。
要は、f(α)=Dを証明したいわけです。
(ステップ3):α=dを示す。
「どうしよっかな」となるわけですが、limn→∞an=limn→∞bn=αなのですから、f(limn→∞an)=Dを示せば良いことになります。
そこで、まだ使っていない事実f(an)<D<f(bn)に着目します。
すると、
limn→∞f(an)<limn→∞D<limn→∞f(bn)⇔limn→∞f(an)<D<limn→∞f(bn)
ですので、仮にlimn→∞f(an)=f(limn→∞an)だったらば、
limn→∞f(an)<D<limn→∞f(bn)⇔f(limn→∞an)<D<f(limn→∞bn)⇔f(α)<D<f(α)⇔f(α)=D
となります。
これは個人の視点に依りますが、筆者は
「連続な関数だったら、定義域内のどの点でも必ず関数の値が1つだけ定まっていて、しかもその値が飛び値でもないわけだから、定義域内の数列の極限とその極限での関数の値が一致しそうだな。でも飛び値があるような不連続な関数だったら必ずしも一致しないな。」
と思うので、本当に正しいかどうか証明してみます。
補題の証明
示したいことは
(∀ϵ>0)(∃N∈N) s.t. (∀n∈N:n>N⇒|f(xn)−f(a)|<ϵ)
です。
毎度のことでδを見つけてきましょう。
まず、fはIで連続なので、a∈Iでも連続です。
従って、
(∀ϵ>0)(∃δ1>0) s.t. (∀x∈I:0<|x−a|<δ1⇒|f(x)−f(a)|<ϵ)
が成り立ちます。
また、数列{xn}n∈Nはaに収束するので、
(∀ϵ2>0)(∃N∈N) s.t. (∀n∈N:n≥N⇒|xn−a|<ϵ2)
が成り立ちます。
このϵ2は任意の正の実数ですので、ϵ2=δ1でも成り立ちます。
すなわち、
(∃N∈N) s.t. (∀n∈N:n≥N⇒|xn−a|<δ1)
が成り立っています。
このときxn∈Iで、尚つ|xn−a|<δ1)が成り立っているので、|f(xn)−f(a)|<ϵが成り立ちます。
すなわち、
(∀ϵ>0)(∃N∈N) s.t. (∀n∈N:n>N⇒|f(xn)−f(a)|<ϵ)
です。
補題の証明終わり
さて、戻りましょう。
今、補題からlimn→∞f(an)=f(limn→∞an)が分かりました。
従って
limn→∞f(an)<D<limn→∞f(bn)⇔f(limn→∞an)<D<f(limn→∞bn)⇔f(α)<D<f(α)⇔f(α)=D
が成り立ちました。
以上のことからf(α)=Dが分かったので、dの正体はαだったことが分かります。
従って、中間値の定理が成り立ちます。
中間値の定理の証明終わり
結
今回は中間値の定理の証明を説明しました。
中間値の定理というのは
ということで、証明には複数の手法がありますが、今回は区間縮小法で証明しました。
次回は関数の連続性から得られるもう一つの有名な定理、平均値の定理のイメージについて解説します。
乞うご期待!質問、コメントなどお待ちしております!
この記事の内容をより詳しく知りたい方は以下のリンクの本を参照してください!
ちなみに「解析概論」は日本の歴史的名著らしいので、辞書的にもぜひ1冊持っておくと良いと思います!
コメントをする