logo

수학에서 구간의 정의 📂보조정리

수학에서 구간의 정의

정의

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

  1. 두 실수 $a \le b$ 에 대해 위와 같은 집합구간interval이라 한다.
  2. 특히 위와 같이 양 끝점 $a,b$ 를 포함하면 대괄호 []를 써서 $\left[ a,b \right]$ 라 적고 클로즈드closed됐다고 한다.
  3. 양 끝점 $a,b$ 를 포함하지 않으면 소괄호 ()를 써서 $\left( a,b \right)$ 라 적고 오픈open됐다 한다.
  4. 두 끝점 중 하나만 포함하지 않으면 클로픈clopen이라 하고, $a$ 만을 포함할때는 $[a,b)$ 라 적고 $b$ 만을 포함할 때는 $(a,b]$ 라 적는다.
  5. 한쪽 끝이 없을 경우, 즉 무한대일 경우엔 다음과 같은 표현을 사용한다. $$ \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차원 유클리드 공간 $\mathbb{R}^{1}$ 에서 연결성을 가지는 부분집합으로써, 이해하기 쉽고 친숙하며 어떤 공부를 하든 오래도록 보게 된다.

수치해석

수치해석과 같은 분야에선 점이 $a,b$ 처럼 딱 두개도 아니고 순서 없이 섞인 여러개의 점을 다룰 때가 있다. 그래서 여러개의 점의 집합 $S := \left\{ x_{1} , \cdots , x_{n} \right\}$ 을 포함하는 가장 작은 구간을 다음과 같이 나타내곤 한다. $$ \mathscr{H} \left\{ x_{1} , \cdots , x_{n} \right\} := \left[ \min S , \max S \right] $$ 구간을 가지고 하는 연산에 관심을 가지는 분야로는 아예 구간 산술interval Arithmetic이라고 하는 분야가 있다고 한다1.

프로그래밍 언어

코딩을 하다가 문득 궁금해서 찾다가 재미있는 글을 본 적이 있다2. 요약하자면 프로그래밍에서는 왜 $(0,n]$ 이나 $[1,n]$ 이 아니라 클로픈 인터벌 $[0,n)$ 을 쓰냐는 건데, 동의하는 내용만 대충 간추려서 수학자의 관점에서 다시 써보려 한다.

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

파이썬이나 매트랩을 위시한 수많은 프로그래밍 언어에서는 위와 유사한 코드가 쓰이곤 하는데, 대개의 경우 저 코드의 실행결과는 다음과 같다. (참고로 이 코드는 파이썬도 아니고 매트랩도 아닌 가상의 언어다.)

0123456789

이게 무슨 말이냐면, 0:n만큼 제어한다고 한다면 그것을 클로픈 인터벌 $[0,n)$ 으로 생각한다는 것이다. 이러한 사고, 컨벤션의 장점은 대부분의 언어에서 인덱스를 $0$ 부터 쓰는데 $i = 0, 1, \cdots , n-1$ 까지 돈다면 그 ‘반복 횟수 자체’는 기가 막히게 $n$ 으로 떨어진다는 것이다. 이렇게 직관적인(?) 표기를 사용하면 실수가 크게 줄어들게 되고, 실용적인 습관이 된다.

그리고 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씩 어긋나는 건 꼭 여러분을 괴롭히려는 게 아니라, 나름대로 그럴싸할 이유가 있을지도 모른다는 것이다.