간단히 정리한 집합의 역사

집합은 수학사에서 가장 독특한 특징을 가진 대상이다. 다른 대상은 탄생 시기도 알기 어려울 정도로 오래전에 불특정 다수의 인간에 의해 창조되고 서서히 그 개념이 발전해 온 반면, 집합만은 칸토르(Cantor) 한 사람의 머리에서 탄생했다. 칸토르 이전, 집합을 하나의 무기로 장착하기 전의 수학은 특히 무한한 대상을 수학적으로 다룰 때 많은 곤란을 겪었다. 대표적인 것이 제논(Zeno of Elea)의 역설이다. 제논의 역설에 대한 설명은 여기에서 확인할 수 있다.

칸토르는 원래 정수론을 주전공으로 연구를 했었으나, 1869년 그의 선배였던 하이네(Heine)에게서 함수를 삼각함수들의 합으로 표현하는 방법이 유일함을 증명하는, 당시의 미해결 문제를 제시받으면서 연구의 방향을 삼각 급수(trigonometric series)로 바꾸게 된다. 이 문제는 당시 내로라는 수학자들인 디리끌레(Dirichlet), 립시츠(Lipschitz), 리만(Riemann)도 관심을 갖고 있었으나 해결을 못하고 있던 문제였다. 이들 중 일부는 이즈음에 이 문제를 해결하지 못하고 이미 사망한 상태였다. 그런데, 이것을 1870년 단 1년만에 칸트르가 풀어버린다. 논문의 내용을 보면 스승이었던 바이어스트라스(Weierstrass)의 영향을 많이 받았음을 알 수 있다고 한다1. 이것에 관련된 논문은 1872년까지 몇 차례에 걸쳐서 발표된다. 이 논문들에서 집합의 개념이 서서히 나타나기 시작했고, 1874년 Crelle의 저널에 집합론의 탄생을 알리는 논문을 발표한다. 하지만, 그 당시의 수학은 수학적 대상을 직접 구성해서 정리를 증명하는 것이 주된 흐름이어서, 칸토르식의 '논리적 존재성'을 주장하는 집합의 개념은 많은 수학자들의 공격을 받았다. 무한집합 부분이 문제였다. 때문에 칸토르는 논문철회를 고민하기도 했었으나, 가까운 관계를 맺고 있는 다른 수학자들의 만류에 의해 논문은 살아남게 된다.

많은 수학자들의 공격에도 불구하고 이후 집합론은 수학에서 살아남게 되고, 발전과정에서 생기는 여러 모순들은 힐베르트나 러셀, 괴델과 같은 최고의 수학자들에 의해 보완이 된다. 1889년 페아노(Peano)는 '...는 ...의 원소이다.'라는 의미를 가지는 기호인 $\in$을 제안한다. 이것은 그리스에서 'is'라는 말과 같은 뜻인 είναι의 첫글자를 따온 것이다.

힐베르트(Hilbert)가 '아무도 우리를 칸토르가 만들어낸 낙원에서 쫓아낼 수 없다'2라고 언급했듯, 칸토르 이후 집합론은 수학 발전에 막대한 영향력을 행사한다.



집합 표현법(Set-Builder Notation)

집합론에서 집합을 나타낼 때는 중괄호에 원소를 일일이 나열하는 원소나열법과 집합의 원소가 가져야 하는 조건을 중괄호 안에 제시하는 조건제시법이 있다. 조건제시법을 사용할 때에는 복잡한 경우 다음과 같을 수 있다.

$$S=\{\,\underbrace{2\cdot x}_{{\text{원소의 형태}}}\mid \underbrace{x}_{{\text{변수}}} \in \underbrace{\mathbb{N}}_{x{\text{의 정의역}}},\ \underbrace{(x^2>2 \text{ and } x<10)}_{{\text{조건식}}}\,\}$$

즉, 중괄호 안에 우선은 집합이 가져야 하는 원소의 형태를 쓰고, 그 다음에는 구분선 |, 그 뒤로는 원소가 가져야 하는 조건을 적어놓는다. 이렇게 정의하면 원소를 직접 나열할 필요도 없고, 심지어 원소가 무엇인지 잘 모르는 상태에서도 집합을 정의할 수 있다.



지능형 리스트(List Comprehension)

지능형 리스트(List Comprehension)는 집합 표현법(Set-Builder Notation)을 빌려와서 목록을 작성하는 방법으로, 몇몇 프로그램 언어에서 구현되어 있다. 요즘에 코딩시간을 급격히 줄여주고 비프로그래머들에게 코딩의 장벽을 급격히 낮춰줬다는 파이썬(Python)에서도 채택되어 유용하게 사용되고 있다. 여기서는 파이썬에서 사용되는 지능형 리스트를 다룬다.

우선, 아래 예제는 1이상 10미만의 자연수를 원소로 하는 집합을 정의해 준다.


{x for x in range(1,10)}


좀 복잡하게 해서 다음은 1부터 10까지의 자연수 중 2의 배수도 아니고 3의 배수도 아닌 수를 원소로 가지는 집합을 정의해 준다.


{k for k in range(1,11) if (k%2 != 0 and k%3 != 0)}


좀 더 복잡하게 해서 다음과 같이 하면 20 미만의 모든 소수를 나열할 수 있다.


{k for k in range(2,20) if len({m for m in range(2,k) if k%m == 0}) == 0 }




2 Uber das Unendliche, Mathematics Annalen 95, (1926)


+ Recent posts