분류
1. 정의
체는 대수적 구조의 하나로, 간단히 말해 덧셈, 뺄셈, 곱셈, 나눗셈의 사칙연산을 집합 안에서 소화할 수 있는 집합을 의미한다.[1] 연산을 통해 나온 값 또한 해당 집합의 원소여야 한다는 뜻.[2] 가장 간단한 체의 예시로는 유리수의 집합 [math( mathbb Q)], 실수의 집합 [math(mathbb R)], 복소수의 집합 [math(mathbb C )]가 있다. 그래서 이들이 체라는 것을 강조하고 싶을 때에는 각각 유리수체, 실수체, 복소수체라고 부르기도 한다.
그러나 정수의 집합 [math(mathbb Z )]는 체가 되지 않는데, 정수 사이의 덧셈, 뺄셈, 곱셈까지는 언제나 원활하게 수행할 수 있지만 아무런 두 정수나 뽑아서 나눗셈을 하였을 때에는 나누어 떨어지지 않는 경우도 있기 때문이다. 물론 자연수의 집합 [math(mathbb N)]의 경우에도 나눗셈은커녕 뺄셈조차도 불가능한 경우가 존재하므로 체가 되지 않는다.
어떤 집합 [math( F )]가 체가 되기 위해서는 다음의 10가지 조건을 만족시켜야 한다.
그러나 정수의 집합 [math(mathbb Z )]는 체가 되지 않는데, 정수 사이의 덧셈, 뺄셈, 곱셈까지는 언제나 원활하게 수행할 수 있지만 아무런 두 정수나 뽑아서 나눗셈을 하였을 때에는 나누어 떨어지지 않는 경우도 있기 때문이다. 물론 자연수의 집합 [math(mathbb N)]의 경우에도 나눗셈은커녕 뺄셈조차도 불가능한 경우가 존재하므로 체가 되지 않는다.
어떤 집합 [math( F )]가 체가 되기 위해서는 다음의 10가지 조건을 만족시켜야 한다.
- 집합 [math( F )] 위에 덧셈과 곱셈이 정의되어 있다.
- (A1) 덧셈에 대해 교환법칙이 성립한다.
- (A2) 덧셈에 대해 결합법칙이 성립한다.
- (A3) 덧셈의 항등원 [math( 0 )]이 존재한다.
- (A4) [math( F )]의 모든 원소 [math( a )]에 대해 역원 [math( -a )]가 존재한다. 따라서 뺄셈도 항상 가능하다.
- (M1) 곱셈에 대해 교환법칙이 성립한다.[4].]
- (M2) 곱셈에 대해 결합법칙이 성립한다. 따라서 곱셈만 있는 식에서도 괄호를 쓰지 않아도 된다.
- (M3) 곱셈의 항등원 [math( 1 )]이 존재한다.
- (M4) [math( F )]의 [math( 0 )]이 아닌 모든 원소 [math( a )]에 대해 역원 [math( a^{-1} )]가 존재한다. 따라서 0 이외의 수로는 항상 나누기를 할 수 있다. 즉 체에서는 나머지가 존재해서는 안 된다.
- (D) 덧셈과 곱셈에 대해 분배법칙이 성립한다.
대수적인 언어로 압축해서 쓰면 ,[math(left(F,+,cdotright))]가 가환 나눗셈환(commutative division ring)이라는 뜻이다.
역대 수학 천재들의 목록을 나열해 본다면 절대로 빼놓을 수 없는 수학자가 바로 갈루아인데 이분이 바로 이 체에 관한 이론을 연구하여 아벨이 기존에 증명하였던 것과는 다른 방식으로 5차 이상의 다항식에 대해서는 근의 공식이 존재하지 않는다는 것을 증명하였다.[5] 갈루아는 체와 군 사이에 존재하는 미묘하고도 심오한 관계를 사용하여 증명을 할 수 있었다. 이에 관한 자세한 설명은 갈루아 이론을 참조하자.
2. 예시
위에서 이미 언급한 유리수체, 실수체, 복소수체 이외에도 체가 되는 집합을 다양하게 만들어 낼 수 있다. 본 항목에서는 체의 예시 중 중요한 것들 몇 가지에 대해 간단히 설명한다.
2.1. 체 확장(Field extension)
대한민국의 중, 고등학교에서 6년 동안 수학 공부를 해온 사람이라면 아마도 [math(a+bsqrt 2)] (단, [math(a, b)]는 유리수) 꼴의 수라는 표현에 매우 익숙할 것이다. 아마 이러한 표현을 보는 순간, 무리수 상등이라는 단어도 같이 떠오를 것이다. 정의에 따라 이런 꼴의 수만 모아놓아 만든 집합도 체가 된다. 고등학생은 이미 [math( a+bsqrt 2)] 꼴의 수를 서로 더하고, 빼고, 곱하여도 언제나 다시 똑같은 꼴의 숫자가 되지, 갑자기 [math( a+bsqrt 3)] 꼴의 수가 튀어나올 수는 없다는 것을 이미 잘 알고 있다. 게다가 나눗셈을 하는 경우에도 아무런 문제가 없는데, 다음과 같이 역수를 취하여도 [math( (a+bsqrt 2)^{-1}=(a-bsqrt 2)/(a^2-2b^2) )] 여전히 [math(a+bsqrt 2)] 꼴의 수가 되기 때문이다. 따라서 이러한 꼴의 수들을 모두 모아 놓은 집합은 체가 된다.
이제 이 집합에 이름을 붙여주고자 한다면 어떻게 하는 것이 좋을까? [math(a+bsqrt 2)] (단, [math(a,b)]는 유리수) 꼴의 수들의 집합은 간단하게 생각해보면 유리수의 집합 [math(mathbb Q)]에 새로운 원소 [math(sqrt 2)]를 추가한 것과 같다. 물론, [math(sqrt 2)]라는 원소 단 하나만을 추가해주었다면, 그건 체가 될 수 없다. 왜냐하면 체는 덧셈과 곱셈에 대해 닫혀 있어야 하므로, [math(sqrt 2)]라는 원소를 체에 추가해 주려면, 동시에 [math(bsqrt 2)] (단, [math(b)]는 유리수) 꼴의 수도 모두 추가해주어야 할 것이고, 따라서 [math(a+bsqrt 2)] (단, [math(a,b)]는 모두 유리수) 꼴의 수를 모두 추가해야만 한다. 그러므로 우리가 설명하고자 하는 집합은 [math(mathbb Q)]라는 체가 [math(sqrt 2)]라는 원소를 포함하도록 확장하려고 할 때 자연스럽게 얻어지는 체라는 것을 알 수 있고, 이를 간단하게 [math(mathbb Q(sqrt 2))]라고 표기할 수 있다.
이와 같이 새롭게 얻어진 체 [math(mathbb Q(sqrt 2))]를 [math(mathbb Q)]의 체 확장이라고 부른다. 이것을 알고 나면, 비슷하게 [math(mathbb Q(sqrt 3))]이라는 체도 쉽게 생각할 수 있을 것이다. 더 나아가서, 원소를 여러 개 덧붙여 [math(mathbb Q(sqrt 2,sqrt 3))]이라는 체도 생각해볼 수 있다. 이는 [math(a+bsqrt 2+csqrt 3+dsqrt 6)] (단, [math(a,b,c,d)]는 모두 유리수) 꼴의 수들을 모두 모은 집합이 된다. 물론, [math(mathbb R(i))]는 [math(mathbb C)]와 같다는 것도 어렵지 않게 이해할 수 있다.
이제 이 집합에 이름을 붙여주고자 한다면 어떻게 하는 것이 좋을까? [math(a+bsqrt 2)] (단, [math(a,b)]는 유리수) 꼴의 수들의 집합은 간단하게 생각해보면 유리수의 집합 [math(mathbb Q)]에 새로운 원소 [math(sqrt 2)]를 추가한 것과 같다. 물론, [math(sqrt 2)]라는 원소 단 하나만을 추가해주었다면, 그건 체가 될 수 없다. 왜냐하면 체는 덧셈과 곱셈에 대해 닫혀 있어야 하므로, [math(sqrt 2)]라는 원소를 체에 추가해 주려면, 동시에 [math(bsqrt 2)] (단, [math(b)]는 유리수) 꼴의 수도 모두 추가해주어야 할 것이고, 따라서 [math(a+bsqrt 2)] (단, [math(a,b)]는 모두 유리수) 꼴의 수를 모두 추가해야만 한다. 그러므로 우리가 설명하고자 하는 집합은 [math(mathbb Q)]라는 체가 [math(sqrt 2)]라는 원소를 포함하도록 확장하려고 할 때 자연스럽게 얻어지는 체라는 것을 알 수 있고, 이를 간단하게 [math(mathbb Q(sqrt 2))]라고 표기할 수 있다.
이와 같이 새롭게 얻어진 체 [math(mathbb Q(sqrt 2))]를 [math(mathbb Q)]의 체 확장이라고 부른다. 이것을 알고 나면, 비슷하게 [math(mathbb Q(sqrt 3))]이라는 체도 쉽게 생각할 수 있을 것이다. 더 나아가서, 원소를 여러 개 덧붙여 [math(mathbb Q(sqrt 2,sqrt 3))]이라는 체도 생각해볼 수 있다. 이는 [math(a+bsqrt 2+csqrt 3+dsqrt 6)] (단, [math(a,b,c,d)]는 모두 유리수) 꼴의 수들을 모두 모은 집합이 된다. 물론, [math(mathbb R(i))]는 [math(mathbb C)]와 같다는 것도 어렵지 않게 이해할 수 있다.
2.2. 분해체(Splitting field)
이제 조금 다른 방향에서 [math(mathbb Q(sqrt 2))]를 생각하자. 이때의 키워드는 바로 다항식의 인수분해이다. [math(x^2-2)]라는 다항식을 생각해보자. 이 다항식의 해는 유리수가 아니므로, 이 다항식을 유리계수 일차다항식 두 개의 곱으로 인수분해하는 것은 절대로 불가능할 것이다. 이처럼 어떤 체에서 더 이상 인수분해할 수 없는 다항식이 있는 경우라면, 언제나 그 체를 확장하여 그 다항식의 해를 가지는 새로운 체를 만들어 낼 수 있다! 그런 체를 만드는 방법은 무엇일까? 바로 다항식의 나머지를 취하는 것이다.
우선, 모든 유리계수 다항식을 모아놓은 집합은 [math(mathbb Q[x])]라고 표기한다. 그리고 인수분해하고자 하는 다항식은 바로 [math(x^2-2)]이다. 이제 우리는 [math(mathbb Q[x])]의 원소들 중, [math(x^2-2)]로 나눈 나머지가 같은 원소들은 그냥 서로 동일한 것이라고 생각한다. 예를 들어, [math(x^2+x+1)]을 [math(x^2-2)]로 나눈 나머지는 [math(x+3)]이므로, [math(x^2+x+1equiv x+3)]으로 취급한다. 그렇게 하고 나면, 어떤 다항식이든 2차다항식으로 나눈 나머지는 1차 이하의 다항식이므로, [math(mathbb Q[x])]의 모든 원소를 어떤 1차 이하의 다항식 [math(a+bx)] (단, [math(a,b)]는 유리수)과 동일한 것이라고 생각할 수 있다. 이 다항식 사이의 덧셈, 뺄셈은 그냥 평범한 다항식의 덧셈, 뺄셈을 사용한다. 두 다항식 사이의 곱을 하고 나면 2차 다항식이 만들어질 수도 있는데, 그 경우에는 다시 [math(x^2-2)]로 나눈 나머지를 취한다. 즉, [math(x times x)]는 [math(x^2-2)]로 나눈 나머지가 2이므로 [math(x)]라는 다항식을 제곱하면 그것은 2가 된다. 마지막으로 나눗셈을 하는 방법을 알아야 하는데, 이것은 조금 복잡하다. 그렇지만 [math(x^2-2)]라는 다항식이 [math(mathbb Q)]에서는 인수분해가 불가능하였다는 사실을 잘 사용하면 어떤 다항식의 역수에 해당하는 다항식을 찾아내는 것도 가능하다. 예를 들어, [math(1/xequiv x/2)]이다. 이 식을 잘 정리하면 [math(x^2-2equiv 0)]를 얻을 수 있고, 양변은 [math(x^2-2)]로 나눈 나머지가 동일하므로 맞는 식이라는 것을 확인할 수 있다. 따라서, 이렇게 [math(mathbb Q[x])]에서 [math(x^2-2)]으로 나눈 나머지가 같은 다항식은 같다고 선언한 집합(기호로는 [math(mathbb Q[x]/(x^2-2))]라고 쓴다.)은 사칙연산이 잘 정의되므로, 체가 된다. 길게 설명했지만 사실 이 체는 위에서 설명한 [math(mathbb Q(sqrt 2))]와 동일한 것이다. 왜냐하면 [math(x^2-2)]로 나눈 나머지 다항식들의 곱셈과 나눗셈에서 [math(x)]라는 기호는 마치 [math(sqrt 2)]처럼 작용하기 때문이다. 우리는 이미 위에서 [math(xtimes xequiv 2)]라든지 [math(1/xequiv x/2)]라든지 하는 식으로부터 [math(x)]라는 기호가 실은 [math(sqrt 2)]처럼 작동하는 것을 이미 확인하였다. 정리하자면, 우리는 [math(sqrt 2)]라는 수의 존재를 전혀 알지 못하고도, [math(x^2-2)]라는 다항식이 해를 가지는 [math(mathbb Q)]의 체 확장을 이야기함으로써, [math(mathbb Q(sqrt 2))]를 만들어낼 수 있다. 이렇게 새로운 체에서는 [math(x^2-2)]를 분해할 수 있으므로, [math(mathbb Q[x]/(x^2-2))]를 [math(x^2-2)]의 분해체라고 부른다.
어떤 다항식이 그 체에서 인수분해되지 않는다는 것만 확인한다면 동일한 일을 반복할 수 있다. 예를 들어, [math(x^2+x+1)]라는 다항식이 해를 가지는 [math(mathbb Q)]의 체 확장을 만들고 싶다면, 유리 계수 다항식을 모두 모아놓고, [math(x^2+x+1)]로 나눈 나머지가 같은 다항식은 서로 동일하다고 선언만 하면 된다. 그렇게 얻어지는 체는 물론 [math(x^2+x+1)]의 해인정석에서 많이 본 [math(omega=(-1+sqrt 3 i)/2)]를 지니고 있을 것이므로 [math(mathbb Q(omega))]와 동일한 체가 될 것이다. 그렇지만 이 체를 구성하기 위해 우리는 [math(omega)]에 대해 알 필요도 없다.
2차 다항식의 경우에는 한 번의 체 확장으로 분해체를 얻을 수 있지만, 고차 다항식이 주어진 경우에는 이러한 체 확장을 여러 번 해야 할 수도 있다. 그렇지만 매번 해를 1개씩만 구하여도 최대 n번만 이 과정을 반복함으로써 어떤 다항식이든 일차다항식의 곱으로 인수분해하는 새로운 체를 구성할 수 있다.[6] 그렇게 얻어지는 체를 그 다항식의 분해체라고 한다. 또한 이런 식으로 계속해서 체를 확장해갈 경우, 유리수체 [math(mathbb{Q}[x])]의 모든 다항식의 근을 포함하는 체를 생각할 수 있는데, 이 체는 [math(mathbb{Q_A})]라고 표기하고 유리수체의 대수적 폐포(Algebraic Closure)라고 부르며, [math(mathbb{Q}subsetneqmathbb{Q_A}subsetneqmathbb{C})]가 된다.
우선, 모든 유리계수 다항식을 모아놓은 집합은 [math(mathbb Q[x])]라고 표기한다. 그리고 인수분해하고자 하는 다항식은 바로 [math(x^2-2)]이다. 이제 우리는 [math(mathbb Q[x])]의 원소들 중, [math(x^2-2)]로 나눈 나머지가 같은 원소들은 그냥 서로 동일한 것이라고 생각한다. 예를 들어, [math(x^2+x+1)]을 [math(x^2-2)]로 나눈 나머지는 [math(x+3)]이므로, [math(x^2+x+1equiv x+3)]으로 취급한다. 그렇게 하고 나면, 어떤 다항식이든 2차다항식으로 나눈 나머지는 1차 이하의 다항식이므로, [math(mathbb Q[x])]의 모든 원소를 어떤 1차 이하의 다항식 [math(a+bx)] (단, [math(a,b)]는 유리수)과 동일한 것이라고 생각할 수 있다. 이 다항식 사이의 덧셈, 뺄셈은 그냥 평범한 다항식의 덧셈, 뺄셈을 사용한다. 두 다항식 사이의 곱을 하고 나면 2차 다항식이 만들어질 수도 있는데, 그 경우에는 다시 [math(x^2-2)]로 나눈 나머지를 취한다. 즉, [math(x times x)]는 [math(x^2-2)]로 나눈 나머지가 2이므로 [math(x)]라는 다항식을 제곱하면 그것은 2가 된다. 마지막으로 나눗셈을 하는 방법을 알아야 하는데, 이것은 조금 복잡하다. 그렇지만 [math(x^2-2)]라는 다항식이 [math(mathbb Q)]에서는 인수분해가 불가능하였다는 사실을 잘 사용하면 어떤 다항식의 역수에 해당하는 다항식을 찾아내는 것도 가능하다. 예를 들어, [math(1/xequiv x/2)]이다. 이 식을 잘 정리하면 [math(x^2-2equiv 0)]를 얻을 수 있고, 양변은 [math(x^2-2)]로 나눈 나머지가 동일하므로 맞는 식이라는 것을 확인할 수 있다. 따라서, 이렇게 [math(mathbb Q[x])]에서 [math(x^2-2)]으로 나눈 나머지가 같은 다항식은 같다고 선언한 집합(기호로는 [math(mathbb Q[x]/(x^2-2))]라고 쓴다.)은 사칙연산이 잘 정의되므로, 체가 된다. 길게 설명했지만 사실 이 체는 위에서 설명한 [math(mathbb Q(sqrt 2))]와 동일한 것이다. 왜냐하면 [math(x^2-2)]로 나눈 나머지 다항식들의 곱셈과 나눗셈에서 [math(x)]라는 기호는 마치 [math(sqrt 2)]처럼 작용하기 때문이다. 우리는 이미 위에서 [math(xtimes xequiv 2)]라든지 [math(1/xequiv x/2)]라든지 하는 식으로부터 [math(x)]라는 기호가 실은 [math(sqrt 2)]처럼 작동하는 것을 이미 확인하였다. 정리하자면, 우리는 [math(sqrt 2)]라는 수의 존재를 전혀 알지 못하고도, [math(x^2-2)]라는 다항식이 해를 가지는 [math(mathbb Q)]의 체 확장을 이야기함으로써, [math(mathbb Q(sqrt 2))]를 만들어낼 수 있다. 이렇게 새로운 체에서는 [math(x^2-2)]를 분해할 수 있으므로, [math(mathbb Q[x]/(x^2-2))]를 [math(x^2-2)]의 분해체라고 부른다.
어떤 다항식이 그 체에서 인수분해되지 않는다는 것만 확인한다면 동일한 일을 반복할 수 있다. 예를 들어, [math(x^2+x+1)]라는 다항식이 해를 가지는 [math(mathbb Q)]의 체 확장을 만들고 싶다면, 유리 계수 다항식을 모두 모아놓고, [math(x^2+x+1)]로 나눈 나머지가 같은 다항식은 서로 동일하다고 선언만 하면 된다. 그렇게 얻어지는 체는 물론 [math(x^2+x+1)]의 해인
2차 다항식의 경우에는 한 번의 체 확장으로 분해체를 얻을 수 있지만, 고차 다항식이 주어진 경우에는 이러한 체 확장을 여러 번 해야 할 수도 있다. 그렇지만 매번 해를 1개씩만 구하여도 최대 n번만 이 과정을 반복함으로써 어떤 다항식이든 일차다항식의 곱으로 인수분해하는 새로운 체를 구성할 수 있다.[6] 그렇게 얻어지는 체를 그 다항식의 분해체라고 한다. 또한 이런 식으로 계속해서 체를 확장해갈 경우, 유리수체 [math(mathbb{Q}[x])]의 모든 다항식의 근을 포함하는 체를 생각할 수 있는데, 이 체는 [math(mathbb{Q_A})]라고 표기하고 유리수체의 대수적 폐포(Algebraic Closure)라고 부르며, [math(mathbb{Q}subsetneqmathbb{Q_A}subsetneqmathbb{C})]가 된다.
2.3. 유한체(Finite field)
지금까지 설명한 체의 예시는 모두 무한집합이었다. 왜냐하면 지금까지 말한 체는 모두 유리수의 집합 [math(mathbb Q)]를 부분집합으로 갖는데, [math(mathbb Q)]가 무한집합이기 때문이다. 그렇지만 [math(mathbb Q)]와는 별개의 근원으로부터 출발한다면 유한집합이 되는 체도 만들 수 있다. 그 별개의 근원이란 다름 아닌 정수의 집합 [math(mathbb Z)]이다. [math(mathbb Z)] 자체는 나눗셈이 항상 잘 떨어지지 않으므로, 그 자신이 체가 될 수 없다는 것을 이미 알고 있다. 따라서 [math(mathbb Z)]를 이용하여 새로운 체를 만들어 낸다는 발상은 꽤 놀라운 것이라고 할 수 있다. [math(mathbb Z)]로부터 체를 만들어내는 방법은 바로 소수 [math(p)]로 나눈 나머지를 관찰하는 것이다.
여기에서는 예시를 들기 위해 [math(p=7)]인 경우만을 생각해보자. 이제 정수의 집합 [math(mathbb Z)]의 원소를 모두 모아놓고, 이들 중 7로 나눈 나머지가 같은 것은 그냥 같은 것으로 취급한다! 예컨대, 15를 7로 나눈 나머지와 8을 7로 나눈 나머지는 모두 1이므로, 그냥 15와 8은 같은 수라고 생각하는 것이다. 그리고 이를 표기하기 위해서는 [math(15equiv 8text{ (mod }7))]이라고 쓴다. 한편, 5와 9는 7로 나눈 나머지가 다르므로 [math(5neq 9text{ (mod }7))]이라고 쓸 수 있다. 이렇게 하고 나면, 정수를 7로 나눈 나머지는 0~6의 7가지만 가능하므로, 원래의 [math(mathbb Z)]는 무한집합이었지만, 이제는 [math({0,1,2,3,4,5,6})]이라는 유한집합이 되어버렸고, 이를 [math(mathbb Z_7)]이라고 표기한다. (물론, [math(p)]가 다른 소수인 경우에도 [math(mathbb Z_p)]라고 표기한다.)
이제 [math(mathbb Z_7)]이 체가 된다는 것을 확인하자. 앞서 말했듯이 어떤 집합이 체가 되는지를 확인하려면 덧셈, 뺄셈, 곱셉, 나눗셈이 잘 이루어지는가를 확인하면 된다. [math(mathbb Z_7)]의 덧셈은 [math(mathbb Z)]에서 원래 쓰던 것을 그냥 가져올 것이다. 예를 들어, [math(15+8equiv 23text{ (mod }7))]과 같이 덧셈을 할 때에는 평범한 정수를 더하듯이 더해주면 된다. 뺄셈과 곱셈의 경우도 마찬가지로 원래 정수 [math(mathbb Z)]에서 하던 뺄셈과 곱셈을 [math(mathbb Z_7)]에 이식하는 것이 가능하다.[7]
이렇게 해서 [math(mathbb Z_7)] 위의 덧셈, 뺄셈, 곱셈은 어렵지 않게 할 수 있다는 것을 확인하였다. 이제 마지막으로 남은 것은 이 위에서 나눗셈을 잘 할 수 있는지를 확인하는 것이다. 그런데 이것은 전혀 쉬운 일이 아니다. 왜냐하면 [math(mathbb Z_7)]의 근원이 되는 [math(mathbb Z)] 자체에, 덧셈, 뺄셈, 곱셈만 있었지, 나눗셈은 없었기 때문이다. 나눗셈을 하는 방법은 우리가 새롭게 정의해주어야 하는데, 이때 사용되는 것이 확장된 유클리드 호제법(Extended Euclidean algorithm)이다. 확장된 유클리드 호제법이란, 두 정수 [math(a,b)]가 주어졌을 때, 두 수의 최대공약수가 [math(g)]라고 하면, [math(am+bn=g)]가 되는 정수 [math(m,n)]을 언제나 빠르게 찾아낼 수 있는 알고리즘이다. (사실 저러한 정수 [math(m,n)]이 항상 존재한다는 사실부터가 충격과 공포다.) 그러면 이제 [math(mathbb Z_7)] 위에서 나눗셈을 할 수 있다. 나눗셈은 역원을 곱하는 것이므로, 0 이외의 수가 항상 역수를 가진다는 것을 보이면 그것이 곧 나눗셈을 할 수 있다는 것을 보이는 것과 같다. 0이 아닌 원소 1, 2, 3, 4, 5, 6에 대해서 각각 역원을 찾으려면 어떻게 해야할까? 1~6은 모두 7보다 작은 자연수이고, 7은 소수이므로, 1~6은 모두 7과 서로소이다. 즉, 최대공약수가 1이다. 따라서 이 중 3의 역원을 계산하고자 한다면, 3과 7을 확장된 유클리드 알고리즘의 입력으로 넣어준다. 3과 7의 최대공약수는 1이므로, 알고리즘은 [math(3m+7n=1)]이 되는 정수 [math(m,n)]을 반환해준다. 그러면 이때의 [math(m)]이 바로 3의 역수가 된다. 왜냐하면 [math(3mequiv 3m+0nequiv 3m+7nequiv 1text{ (mod }7))]이기 때문이다! 실제로 계산을 해보면 3의 역수는기분이 이상하지만 5가 되는 것을 알 수 있다. [math(3times 5equiv 15equiv 1text{ (mod }7))]이기 때문이다.
따라서 [math(mathbb Z_7)]는 체가 된다. 그리고 이는 위에서 예시로 보여주었던 체들과는 달리 유한집합이다. 이와 같이 유한집합이 되는 체를 유한체 또는 갈루아 체라고 부른다. 유한체는 이미 수학자들에 의해 완벽한 분류(classification)[8]가 이루어져 있다. 보다 자세히 말하자면, 유한체의 원소의 개수는 모두 [math(p^n)] (단, [math(p)]는 소수)의 꼴로 표현되고, 원소 수가 [math(p^n)]개인 체는 오직 하나가 존재한다는 사실이 증명되어 있다.[9]위의 다항식 [math(x^{p^n}-x=0)]과 이것의 해의 모임 [math(F)]를 생각하자. [math(text{char}left(mathbb Z_pright)=p)]이므로, 임의의 [math(alpha,beta in F)]에 대하여 [math(left(alpha+betaright)^{p^{n}}=alpha+beta)]이다. 나머지 체의 공리들은 쉽게 보일 수 있다. 따라서, [math(F)]는 [math(mathbb{Z}_p)]위의 다항식 [math(x^{p^{n}}-x=0)]의 분해체이다.][10]인 체 [math(F)]에 대해, [math(F^{times})]는 곱셈군이므로, 모든 [math( alphain F^{times})]에 대해 [math(alpha^{p^{n}-1}=alpha^{left|F^{times}right|}=1)]이다. 따라서, 모든 [math( alphain F)]에 대해, [math(alpha^{p^{n}}-alpha=0)]이다. 즉, [math(F)]의 모든 원소는, [math(mathbb{Z}_p)]위의 다항식 [math(x^{p^{n}}-x=0)]의 근이고, 이 방정식의 차수는 [math(p^{n}=left|Fright|)]이므로, [math(F)]는 [math(mathbb{Z}_p)]위의 다항식 [math(x^{p^{n}}-x=0)]의 분해체이다. 분해체의 유일성에 의해, [math(F)]는 유일하다.] 즉, 원소 수가 7개인 체는 위에서 밝혀낸 [math(mathbb Z_7)] 하나뿐인 것이다. 위에서 설명한 방법을 사용하면 원소의 개수가 [math(p)]인 체는 모두 만들어낼 수 있는데, 어떻게 하면 [math(p^n)]개의 원소를 가지는 체를 만들어낼 수 있을까? 이는 조금 더 복잡하지만 정수를 소수로 나눈 나머지를 생각하는 대신, [math(mathbb Z_p)]의 원소를 계수로 가지는 다항식을 [math(n)]차 기약다항식으로 나누는 방법을 사용하여 만들 수 있다.
유한체의 분류 문제가 완벽하게 해결되었다고 해서, 유한체는 비교적 단순한 대상이라는 오해가 있을 수도 있다. 전혀 그렇지 않다. 예를 들어, 유한체 위에서 곱셈이 잘 정의되기 때문에, 실수에서의 로그와 비슷한 것을 생각하여 [math(mathbb Z_p)] 위에서의 로그를 생각해볼 수 있다. 예를 들어, [math(mathbb Z_7)] 위에서 생각한다면 [math(log_3 6equiv 3)]이다. 이는 [math(3^3equiv 27equiv 6text{ (mod }7))]이기 때문이다. 그렇지만 이렇게 로그를 계산하는 것은 소수 [math(p)]가 50자리 이상의 큰 수가 되고 나면 더이상 쉬운 문제가 아니다. 이와 같은 것을 이산 로그 문제(DLP)라고 하는데, 양자컴퓨터를 사용하지 않고서는 빠르게 계산하는 방법이 전혀 밝혀지지 않았기 때문에, 심지어는 이를 응용하여 암호 시스템을 만들 수 있을 정도이다! 이산 로그 문제와 소인수분해 문제가 동등함을 쉽게 밝힐 수 있고, 이산 로그 문제의 다항 시간 해법을 알면 위키러 여러분도 다항 시간 내에 끝나는 간편한 소인수분해 알고리즘을 만들 수 있다! [11]
여기에서는 예시를 들기 위해 [math(p=7)]인 경우만을 생각해보자. 이제 정수의 집합 [math(mathbb Z)]의 원소를 모두 모아놓고, 이들 중 7로 나눈 나머지가 같은 것은 그냥 같은 것으로 취급한다! 예컨대, 15를 7로 나눈 나머지와 8을 7로 나눈 나머지는 모두 1이므로, 그냥 15와 8은 같은 수라고 생각하는 것이다. 그리고 이를 표기하기 위해서는 [math(15equiv 8text{ (mod }7))]이라고 쓴다. 한편, 5와 9는 7로 나눈 나머지가 다르므로 [math(5neq 9text{ (mod }7))]이라고 쓸 수 있다. 이렇게 하고 나면, 정수를 7로 나눈 나머지는 0~6의 7가지만 가능하므로, 원래의 [math(mathbb Z)]는 무한집합이었지만, 이제는 [math({0,1,2,3,4,5,6})]이라는 유한집합이 되어버렸고, 이를 [math(mathbb Z_7)]이라고 표기한다. (물론, [math(p)]가 다른 소수인 경우에도 [math(mathbb Z_p)]라고 표기한다.)
이제 [math(mathbb Z_7)]이 체가 된다는 것을 확인하자. 앞서 말했듯이 어떤 집합이 체가 되는지를 확인하려면 덧셈, 뺄셈, 곱셉, 나눗셈이 잘 이루어지는가를 확인하면 된다. [math(mathbb Z_7)]의 덧셈은 [math(mathbb Z)]에서 원래 쓰던 것을 그냥 가져올 것이다. 예를 들어, [math(15+8equiv 23text{ (mod }7))]과 같이 덧셈을 할 때에는 평범한 정수를 더하듯이 더해주면 된다. 뺄셈과 곱셈의 경우도 마찬가지로 원래 정수 [math(mathbb Z)]에서 하던 뺄셈과 곱셈을 [math(mathbb Z_7)]에 이식하는 것이 가능하다.[7]
이렇게 해서 [math(mathbb Z_7)] 위의 덧셈, 뺄셈, 곱셈은 어렵지 않게 할 수 있다는 것을 확인하였다. 이제 마지막으로 남은 것은 이 위에서 나눗셈을 잘 할 수 있는지를 확인하는 것이다. 그런데 이것은 전혀 쉬운 일이 아니다. 왜냐하면 [math(mathbb Z_7)]의 근원이 되는 [math(mathbb Z)] 자체에, 덧셈, 뺄셈, 곱셈만 있었지, 나눗셈은 없었기 때문이다. 나눗셈을 하는 방법은 우리가 새롭게 정의해주어야 하는데, 이때 사용되는 것이 확장된 유클리드 호제법(Extended Euclidean algorithm)이다. 확장된 유클리드 호제법이란, 두 정수 [math(a,b)]가 주어졌을 때, 두 수의 최대공약수가 [math(g)]라고 하면, [math(am+bn=g)]가 되는 정수 [math(m,n)]을 언제나 빠르게 찾아낼 수 있는 알고리즘이다. (사실 저러한 정수 [math(m,n)]이 항상 존재한다는 사실부터가 충격과 공포다.) 그러면 이제 [math(mathbb Z_7)] 위에서 나눗셈을 할 수 있다. 나눗셈은 역원을 곱하는 것이므로, 0 이외의 수가 항상 역수를 가진다는 것을 보이면 그것이 곧 나눗셈을 할 수 있다는 것을 보이는 것과 같다. 0이 아닌 원소 1, 2, 3, 4, 5, 6에 대해서 각각 역원을 찾으려면 어떻게 해야할까? 1~6은 모두 7보다 작은 자연수이고, 7은 소수이므로, 1~6은 모두 7과 서로소이다. 즉, 최대공약수가 1이다. 따라서 이 중 3의 역원을 계산하고자 한다면, 3과 7을 확장된 유클리드 알고리즘의 입력으로 넣어준다. 3과 7의 최대공약수는 1이므로, 알고리즘은 [math(3m+7n=1)]이 되는 정수 [math(m,n)]을 반환해준다. 그러면 이때의 [math(m)]이 바로 3의 역수가 된다. 왜냐하면 [math(3mequiv 3m+0nequiv 3m+7nequiv 1text{ (mod }7))]이기 때문이다! 실제로 계산을 해보면 3의 역수는
따라서 [math(mathbb Z_7)]는 체가 된다. 그리고 이는 위에서 예시로 보여주었던 체들과는 달리 유한집합이다. 이와 같이 유한집합이 되는 체를 유한체 또는 갈루아 체라고 부른다. 유한체는 이미 수학자들에 의해 완벽한 분류(classification)[8]가 이루어져 있다. 보다 자세히 말하자면, 유한체의 원소의 개수는 모두 [math(p^n)] (단, [math(p)]는 소수)의 꼴로 표현되고, 원소 수가 [math(p^n)]개인 체는 오직 하나가 존재한다는 사실이 증명되어 있다.[9]위의 다항식 [math(x^{p^n}-x=0)]과 이것의 해의 모임 [math(F)]를 생각하자. [math(text{char}left(mathbb Z_pright)=p)]이므로, 임의의 [math(alpha,beta in F)]에 대하여 [math(left(alpha+betaright)^{p^{n}}=alpha+beta)]이다. 나머지 체의 공리들은 쉽게 보일 수 있다. 따라서, [math(F)]는 [math(mathbb{Z}_p)]위의 다항식 [math(x^{p^{n}}-x=0)]의 분해체이다.][10]인 체 [math(F)]에 대해, [math(F^{times})]는 곱셈군이므로, 모든 [math( alphain F^{times})]에 대해 [math(alpha^{p^{n}-1}=alpha^{left|F^{times}right|}=1)]이다. 따라서, 모든 [math( alphain F)]에 대해, [math(alpha^{p^{n}}-alpha=0)]이다. 즉, [math(F)]의 모든 원소는, [math(mathbb{Z}_p)]위의 다항식 [math(x^{p^{n}}-x=0)]의 근이고, 이 방정식의 차수는 [math(p^{n}=left|Fright|)]이므로, [math(F)]는 [math(mathbb{Z}_p)]위의 다항식 [math(x^{p^{n}}-x=0)]의 분해체이다. 분해체의 유일성에 의해, [math(F)]는 유일하다.] 즉, 원소 수가 7개인 체는 위에서 밝혀낸 [math(mathbb Z_7)] 하나뿐인 것이다. 위에서 설명한 방법을 사용하면 원소의 개수가 [math(p)]인 체는 모두 만들어낼 수 있는데, 어떻게 하면 [math(p^n)]개의 원소를 가지는 체를 만들어낼 수 있을까? 이는 조금 더 복잡하지만 정수를 소수로 나눈 나머지를 생각하는 대신, [math(mathbb Z_p)]의 원소를 계수로 가지는 다항식을 [math(n)]차 기약다항식으로 나누는 방법을 사용하여 만들 수 있다.
유한체의 분류 문제가 완벽하게 해결되었다고 해서, 유한체는 비교적 단순한 대상이라는 오해가 있을 수도 있다. 전혀 그렇지 않다. 예를 들어, 유한체 위에서 곱셈이 잘 정의되기 때문에, 실수에서의 로그와 비슷한 것을 생각하여 [math(mathbb Z_p)] 위에서의 로그를 생각해볼 수 있다. 예를 들어, [math(mathbb Z_7)] 위에서 생각한다면 [math(log_3 6equiv 3)]이다. 이는 [math(3^3equiv 27equiv 6text{ (mod }7))]이기 때문이다. 그렇지만 이렇게 로그를 계산하는 것은 소수 [math(p)]가 50자리 이상의 큰 수가 되고 나면 더이상 쉬운 문제가 아니다. 이와 같은 것을 이산 로그 문제(DLP)라고 하는데, 양자컴퓨터를 사용하지 않고서는 빠르게 계산하는 방법이 전혀 밝혀지지 않았기 때문에, 심지어는 이를 응용하여 암호 시스템을 만들 수 있을 정도이다! 이산 로그 문제와 소인수분해 문제가 동등함을 쉽게 밝힐 수 있고, 이산 로그 문제의 다항 시간 해법을 알면 위키러 여러분도 다항 시간 내에 끝나는 간편한 소인수분해 알고리즘을 만들 수 있다! [11]
[1] 쉽게말해 유리수끼리 사칙연산해서 유리수가 나오는 식.[2] 이를 해당 연산에 대해 닫혀있다고 말한다.[3] 이게 성립하지 않는 환은 꼬인체(skew field)가 된다. 대표적으로 사원수 집합 [math(mathbb H)[4] 이게 성립하지 않는 환은 꼬인체(skew field)가 된다. 대표적으로 사원수 집합 [math(mathbb H)[5] 이때 근의 공식이란, 덧셈, 뺄셈, 곱셈, 나눗셈, n승근의 조합으로만 구성된 수식을 의미한다. [6] 이는 대수학의 기본정리의 자명한 귀결로 얻어지는 결과다. 항목의 따름정리 1 참조.[7] 사실 이러한 이식 과정에서 연산 사이에 호환이 잘 이루어지는지를 추가적으로 확인해보아야 한다. 이는 두 정수 a, b가 주어졌을 때, a와 b를 각각 7로 나눈 나머지를 더한 후 7로 나눈 나머지를 취한 것과, a+b를 7로 나눈 나머지를 취한 것이 동일하다는 사실에 기인하고 있다. 곱셈도 마찬가지이다.[8] classification 문제는 수학의 곳곳에서 발견되는 아주 중요한 문제이다.[9] 존재성 증명: [math(mathbb Z_p)[10] 유일성 증명: [math(left|Fright|=p^{n})[11] 복잡한 정수론적 문제란 곧 새로운 암호 시스템 하나를 의미한다. 잘 알려져 있듯이, 소인수분해의 어려움은 널리 쓰이는 RSA 암호 시스템의 기초가 된다. 그러나 RSA는 양자컴퓨터가 개발되면 공격할 수 있기 때문에, 요즘 수학자들은 양자컴퓨터로도 풀기 어려운 격자(lattice) 문제에 기반하는 다른 암호 시스템의 안전성을 연구하고 있다.