では早速、「環」を定義していきます。

「環」とは一言でいうと「２つの演算が上手く定義された集合の総称」です。「環」というものがただ１つ存在するのではなく、ある条件を満たす集合を「環」と呼ぶということです。厳密な定義は次の通りです。

$R$ を集合とし，2つの演算 "$+$" と "$*$" が入っているとする．この時，$R$ が次の8つの条件を満たすならば，$R$ は環であると呼ばれる．

ここで、"元"とは、"げん"と読み、要素と同じ意味です。つまり、"$R$ の元"とは"$R$ の要素"のことであり、例えば、$3$は"整数の集合"の元です。

おそらく、定義1を見てもピンと来ないというのが、正直なところではないでしょうか。この定義を理解をするために、一度、いくつかの具体的な例を見ていきたいと思います。





環の例

代表的な環の例の１つは、「整数の集合」です。

整数は

\[\ldots,-3,-2,-1,0,1,2,3,\ldots\]

というように、正の数、0、負の数から構成される数の集まりです。整数の集合は，通常 $\mathbb{Z}$ という記号で表されます。

そしてこの中には、「足す"$+$"」と「掛ける"$*$"」という２つの演算が定義されています。整数では次のような8つの条件が満たされています。

任意の整数 $a,b,c$ に対し，$(a+b)+c=a+(b+c)$． ( 和の結合律 ) 任意の整数 $a$ に対し，$a+0=a$． ( 0の存在 ) 任意の整数 $a$ に対し，ある整数 $b$ が存在して，$a+b=0$． ( $-a$の存在 ) 任意の整数 $a,b$ に対し，$a+b=b+a$． ( 和の交換律 ) 任意の整数 $a,b,c$ に対し，$a*(b*c)=(a*b)*c$． ( 積の結合律 ) 任意の整数 $a$ に対し，$a*1=1*a=a$． ( 1の存在 ) 任意の整数 $a,b,c$ に対し，$a*(b+c)=a*b+a*c$． ( 分配法則1 ) 任意の整数 $a,b,c$ に対し，$(a+b)*c=a*c+b*c$． ( 分配法則2 )

これは、先ほどの環の条件を，$R=\mathbb{Z}$ として置き換えたものです。これらの条件について、Pythonで計算しながら確認していきましょう。まず、１番目の条件について考えます。

当然といえば当然ですが、Pythonでは整数の計算ができます。まずは、"(1+2)+3"を計算して見ます。

>>> ( 1 + 2 )+ 3 6

上では、"(1+2)+3"を"1+2"から先に計算すると"1+2=3"、それに"+3"をすると、答えは"6"が出てきています。次に、"()"の場所を変えると、

>>> 1 +( 2 + 3 ) 6

今度は、"2+3"を先に計算して、"2+3=5"、それに"1"を足して、答えは"6"が出てきました。当たり前ですが、先ほどと同じ結果になっています。つまり、

\[

(1+2)+3=1+(2+3)

\]

が成り立つというわけです。これを任意の整数に一般化したのが、先ほどの１番目の条件

任意の整数 $a,b,c$ に対し，$(a+b)+c=a+(b+c)$．( 和の結合律 )

のことです。同様に、２番目の条件について考えてみましょう。"4+0"を計算すると、

>>> 4 + 0 4

当然、4 のままです。これを、任意の整数に一般化したのが、２番目の条件

2. 任意の整数 $a$ に対し，$a+0=a$．(０の存在)

になります。他の条件についても、具体的に計算してみます。

>>> 5 +(- 5 ) 0 >>> 6 + 7 13 >>> 7 + 6 13 >>> 2 *( 3 * 4 ) 24 >>> ( 2 * 3 )* 4 24 >>> 1 * 7 7 >>> 7 * 1 7 >>> ( 2 + 3 )* 4 20 >>> 2 * 4 + 3 * 4 20 >>> 5 *( 6 + 7 ) 65 >>> 5 * 6 + 5 * 7 65

確かに、今計算した例だと、残り６つの条件もすべて成り立っています。

今確認したことは、至極当たり前の性質かもしれません。 しかし、この「当たり前の性質」というのが、私たちがこれから可換環論を学ぶ上でとても重要な役割を果たします。

整数以外にも、同じような性質を満たす集合はあります。有理数を係数に持つ１変数多項式の集合 $\mathbb{Q}[x]$ です。簡単には"多項式の集合"と思ってください。

任意の多項式 $f,g,h$ に対し，$(f+g)+h=f+(g+h)$． ( 和の結合律 ) 任意の多項式 $f$ に対し，$f+0=f$． ( ０の存在 ) 任意の多項式 $f$ に対し，ある多項式 $g$ が存在して，$f+g=0$． ( $-f$ の存在 ) 任意の多項式 $f,g$ に対し，$f+g=g+f$． ( 和の交換律 ) 任意の多項式 $f,g,h$ に対し，$f*(g*h)=(f*g)*h$． ( 積の結合律 ) 任意の多項式 $f$ に対し，$f*1=1*f=f$． ( １の存在 ) 任意の多項式 $f,g,h$ に対し，$f*(g+h)=f*g+f*h$． ( 分配法則1 ) 任意の多項式 $f,g,h$ に対し，$(f+g)*h=f*h+g*h$． ( 分配法則2 )

これは、定義1の $R$ を $R=\mathbb{Q}[x]$ に置き換えた条件になっています。*2

実際に、Pythonで計算してみて確認してみましょう。

今回は、SymPy module を使用します。事前に

$pip install sympy

などでmoduleをインストールしてください。SymPyでは、多項式の計算を簡単に行うことができます。まず、

>>> from sympy import *

sympy を import します。次に、使う変数として'x'を宣言します。例えば、

>>> x=Symbol( 'x' ) >>> x+ 1 x + 1

とすると変数として "x" が宣言され、"x+1" と入力すると、そのまま "x+1" が出てきます。ここで、"x=Symbol('x')" の左側の"x"と右側の "x" の違いは、左側は計算する時に用いる"変数"で、右側は実際に表示される"文字"です。例えば、"x=Symbol('X')" に変えてみます。

>>> x=Symbol( 'X' ) >>> x+ 1 X + 1

すると、入力する時は、小文字の "x" を使っていますが、表示されているのは、大文字の "X" です。では、先ほどの８つの条件が成立することを具体例で確認してみましょう。$f,g,h$をそれぞれ、$f=x+1$, $g=x^2+3$, $h=x^3+4$とします。

>>> f=x+ 1 >>> g= 2 *x** 2 + 3 >>> h=x** 3 + 4

Python で入力する時は、指数は、"**"のように2個のアスタリスクで表します。ちなみに、アスタリスク1個"*"は、普通の積です。性質の１から６を計算してみると、

>>> (f+g)+h x** 3 + 2 *x** 2 + x + 8 >>> f+(g+h) x** 3 + 2 *x** 2 + x + 8 >>> f+ 0 x + 1 >>> f+(-x- 1 ) 0 >>> f+g 2 *x** 2 + x + 4 >>> g+f 2 *x** 2 + x + 4 >>> (f*g)*h (x + 1 )*( 2 *x** 2 + 3 )*(x** 3 + 4 ) >>> f*(g*h) (x + 1 )*( 2 *x** 2 + 3 )*(x** 3 + 4 ) >>> f* 1 x + 1 >>> 1 *f x + 1

確かに成り立っています。７については、

>>> f*(g+h) (x + 1 )*(x** 3 + 2 *x** 2 + 7 ) >>> f*g+f*h (x + 1 )*( 2 *x** 2 + 3 ) + (x + 1 )*(x** 3 + 4 )

となり、見た目は違う結果が出ていますが、"expand"で式を展開すれば、

>>> expand(f*(g+h)) x** 4 + 3 *x** 3 + 2 *x** 2 + 7 *x + 7 >>> expand(f*g+f*h) x** 4 + 3 *x** 3 + 2 *x** 2 + 7 *x + 7



確かに同じ結果になっています。８番目の性質についてもexpandすれば同じ結果が出ます。

>>> expand((f+g)*h) 2 *x** 5 + x** 4 + 4 *x** 3 + 8 *x** 2 + 4 *x + 16 >>> expand(f*h+g*h) 2 *x** 5 + x** 4 + 4 *x** 3 + 8 *x** 2 + 4 *x + 16

ということで、多項式の集合についても、整数と同じような性質が成り立つことが実感できました。すなわち、多項式の集合 $\mathbb{Q}[x]$ も環であることが言えました。