logo

数学における区間の定義 📂レンマ

数学における区間の定義

定義

[a,b]:={xR:axb}R [a,b] := \left\{ x \in \mathbb{R} : a \le x \le b \right\} \subset \mathbb{R}

  1. 二つの実数aba \le bに対して、上のような集合区間intervalと言う。
  2. 特に、両端a,ba,bを含む場合、ブラケット[]を使って[a,b]\left[ a,b \right]と書き、クローズドclosedされたと言う。
  3. 両端a,ba,bを含まない場合、カッコ()を使って(a,b)\left( a,b \right)と書き、オープンopenされたと言う。
  4. 2つの端のうち一方のみを含まない場合、クロープンclopenと言い、aaのみを含む場合は[a,b)[a,b)と書き、bbのみを含む場合は(a,b](a,b]と書く。
  5. 端が一方しかない場合、つまり無限大の場合は次のような表現を使う。 (,b):={xR:x<b}R(a,):={xR:a<x}R \begin{align*} (-\infty, b) &:= \left\{ x \in \mathbb{R} : x \lt b \right\} \subset \mathbb{R} \\ (a, \infty) &:= \left\{ x \in \mathbb{R} : a \lt x \right\} \subset \mathbb{R} \end{align*}

説明

区間は、1次元ユークリッド空間R1\mathbb{R}^{1}連結性を持つ部分集合として、我々が最もよく知る集合の一つで、理解しやすく、親しみやすく、どんな勉強をしても長く見ることになる。

数値解析

数値解析のような分野では、a,ba,bのようにちょうど二つだけではなく、順序なしに混ざった多くの点を扱う時がある。だから、多くの点の集合S:={x1,,xn}S := \left\{ x_{1} , \cdots , x_{n} \right\}を含む最小の区間を次のように示すことがある。 H{x1,,xn}:=[minS,maxS] \mathscr{H} \left\{ x_{1} , \cdots , x_{n} \right\} := \left[ \min S , \max S \right] 区間を使った演算に興味を持つ分野では、区間算術interval Arithmeticという分野があると言われている1

プログラミング言語

コードを書いていてふと気になって探した面白い記事を見たことがある。2 要するに、プログラミングではなぜ(0,n](0,n][1,n][1,n]ではなくクロープンインターバル[0,n)[0,n)を使うのかということだが、数学者の観点から同意する内容だけを簡単にまとめて書いてみたいと思った。

n = 10
for i in 0:n
    print(n)

PythonMATLABなど多くのプログラミング言語では、類似したコードがよく使われていて、大抵の場合、そのコードの実行結果は次のようになる。 (ちなみにこのコードはPythonでもMATLABでもない、仮想の言語だ。)

0123456789

これが何を意味するかというと、0:nだけ制御するとしたら、それをクロープンインターバル[0,n)[0,n)と考えるということだ。このような考え方、慣習の利点は、ほとんどの言語でインデックスを00から使いi=0,1,,n1i = 0, 1, \cdots , n-1まで回すと、その’繰り返し回数自体’が見事にnnになるということだ。このような直感的な表記を使うと、誤りが大幅に減り、実用的な習慣になる。

そして、C言語などでは同じ表現をfor(i=0; i<10; i++)のように書かなければならないが、1から始めて正確に10で終わるfor(i=1; i<=10; i++)と比較すると、オペレータ自体が<から<=へとより汚くなり、実際Cで使う配列にアクセスする時は0も含まれなければならないので、ちょうどこのような繰り返しはバカバカしくfor(i=0; i<=(10-1); i++)のように書かなければならないかもしれない。

つまり、コーディングを学ぶ人を混乱させたり、1つずれることは、みんなをいじめるためではなく、なんとなくそれなりの理由があるかもしれないということだ。