集合と写像#

関係データベースのデータモデルである関係データモデルは,代数学,特に集合と写像に関する数学理論に支えられている. 関係データモデルを理解するためにはこれらの知識が必要となるため,以下,最低限必要となる集合と写像の知識を説明する.

以下の説明はかなり形式的である. 当たり前のことを記号をふんだんに使って説明しているが,物事を抽象化して捉えるためには記号的(数学的)な道具が必要になるので,嫌がらず読んでほしい(ただし気負いすぎないこと). なお,集合と写像について知識がある読者は,本節を読み飛ばしても問題ない.

集合#

数学における集合(set) とは,何かを集めたものである. 集合を構成する個々の「何か」は 要素(あるいは元; element) と呼ばれる.

例えば,以下は集合の例である.

{1,2,3}

上記集合は整数1,2,3を要素として集めたものである. 1,2,3はそれぞれ集合{1, 2, 3}の要素である. 一般に,集合は波カッコの中に要素を並べて表現する.

集合には名前がつけられる. 例えば,上記集合について

A={1,2,3}

とすれば,集合{1,2,3}を集合Aと呼ぶことができる. なお,慣習上,集合をアルファベットで表すときは大文字アルファベット1文字,集合の要素をアルファベットで表すときは小文字アルファベット1文字を使う(例外ケースもある).

ある要素がある集合に属していることは,記号を用いて表現する. 例えば,整数1が集合Aに属していること(つまり集合Aの要素であること)は

1A

と書ける. 一方,ある要素がある集合に属して「いない」ことは,記号を用いて表現する. 例えば,整数7が集合Aに属していないことは

7A

と書ける.

集合の要素は数に限らない. 例えば,以下の平仮名集合Hのように文字の集合もありうる.

H={,,,,,....,,,}

なお,集合の要素間の順序関係は無視される[1]. それゆえ,集合A={1,2,3,4,5}B={5,4,3,2,1}はまったく同じ集合となる. つまり,

A=B

となる. また,(数学的な定義の)集合の要素は重複してはならない[2]. 重複する要素があった場合は,重複は無視して扱われる. 例えば,A={1,3,5,7,7}A={1,3,5,7}として扱われることになる.

集合の外延的定義と内包的定義#

集合の定義(表記)方法には2種類ある.

1つは外延的定義である. これは,集合の要素を具体的に列挙することで集合を定義する方法である. 例えば,

A={2,4,6,8,10,12,14,16,18,20}

は「20以下の偶数」である集合Aを外延的定義によって定義したものである. 外延的定義では集合の要素をすべて列挙するのが大変なため,以下のように途中の要素をテンテンで省略して書く場合もある.

A={2,4,6,...,18,20}

2つめの定義方法は内包的定義である. 外延的定義では要素を具体的に列挙するのに対して,内包的定義では集合の要素が満たすべき条件(性質)を示すことで集合を定義する. 例えば,前述の集合Aであれば,

A={2n | n0n10}

と書ける.内包的定義では波カッコの中を縦棒(|)で区切り,左側に集合の要素を表す文字を書き,右側には要素に関する条件を書く. なお,条件のAND(「かつ」)は以下のようにカンマで書くこともある.

A={2n | n,0n10}

よく使われる数の集合#

整数,自然数のように,よく使われる数の集合には特別な集合名が付けられている. 以下,代表的な数の集合を列挙しておく.

Zは,整数全体をあらわす集合である. すなわち,

Z={...,2,1,0,1,2,...}.

例えば,7Zであり,0.3Zである.

Nは,自然数全体をあらわす集合である. すなわち,

N={1,2,3,...}={n | nZ,n1}.

Rは,実数全体をあらわす集合である. 例えば,3RπReRであり,1+1iRRである(★Quiz1★★Quiz2★).

空集合#

要素を持たない集合も集合である. そのような集合を空集合と呼ぶ. 空集合はϕで表す. すなわち,

ϕ={}

集合の要素数#

集合Xの要素数は,|X|と表記する. 例えばA={1,2,3,4,5}のとき,|A|=5である. また,

Zn={0,1,2,3,....,n1}={x | xZ,0xn}

のとき,|Zn|=n となる.

要素を持たない集合も集合である. そのような集合を空集合と呼ぶ. 空集合はϕで表す. すなわち,

ϕ={}

積集合(集合の共通部分)#

2つの集合A,Bが与えられたとき,集合A,Bに共通の要素を集めた集合を積集合(あるいは共通集合; intersection) と呼ぶ. 集合Aと集合Bの積集合はABと記す. 積集合ABの内包的定義は以下の通り:

AB={x | xAxB}

以下の図は,集合A={2,4,6,8,10}と集合B={4,8,12,16,20}の積集合ABをベン図で表している. このケースではAB={4,8}となる.

積集合

和集合#

2つの集合A,Bが与えられたとき,集合A,Bのいずれかに属する要素を集めた集合を和集合(union) と呼ぶ. 集合Aと集合Bの和集合はABと記す. 和集合ABの内包的定義は以下の通り:

AB={x | xAxB}

以下の図は,集合A={2,4,6,8,10}と集合B={4,8,12,16,20}の和集合ABをベン図で表している. このケースではAB={2,4,6,8,10,12,16,20}となる.

和集合

差集合#

2つの集合A,Bが与えられたとき,集合Aには属しているが集合Bには属していない要素を集めた集合をBからAを引いた差集合(set difference) と呼ぶ. 集合Bから集合Aを引いた差集合をBAまたはBAと記す. 差集合BAの内包的定義は以下の通り:

BA={x | xBxA}

以下の図は,集合A={2,4,6,8,10}から集合B={4,8,12,16,20}を引いた差集合ABをベン図で表している. このケースではAB={2,6,10}となる.

差集合1

以下は,集合Bから集合Aを引いた差集合BAを表したベン図である. このケースではBA={12,16,20}となる. 2つの図を比較したら分かるように,差集合ABBAは異なる(★Quiz3★).

差集合2

部分集合#

2つの集合A,Bが与えられたとき,集合Bが集合Aの一部としてすっぽり入っているとき,集合Bは集合Aの部分集合(subset) であるという. もう少し堅い定義をすると,集合Bの任意の要素(あらゆる要素)が集合Aに属するとき,集合Bは集合Aの部分集合である,とする. 集合Bが集合Aの部分集合であることを,BAと記す.

例えば,以下の図では集合A={5,10,15,20,25,30,35}と集合B={10,20,30}であり, 集合Bの要素はすべて集合Aの要素なので,BAとなる(★Quiz4★).

部分集合

直積#

2つの集合AとBが与えられたとき,Aの要素とBの要素を1つずつ取り出して作れるすべての組(ペア)を集めた集合を直積集合(Cartesian productあるいはdirect product) あるいは単に直積と呼ぶ. 集合AおよびBの直積集合はA×Bと記す. 直積集合A×Bの内包的な定義は以下の通り:

A×B={(a,b) | aA,bB}

例を見てみよう. 例えば,A={1,3,5}B={2,4,6}のとき,AとBの直積は

A×B={(1,2),(1,4),(1,6),(3,2),(3,4),(3,6),(5,2),(5,4),(5,6)}

となる.

もう1つ例を見てみよう. 直積R×Rは2つの実数の組の集合になる. 1つ目のRの要素をx座標の値,2つ目のRの要素をy座標の値とすれば,R×Rは2次元平面と見なすことができる.

最後に数値ではない直積の例を見てみよう. 集合C={,},集合D={,,,}が与えられたとき, 集合Cと集合Dの直積は,

C×D={(,),(,),(,),(,),                   (,),(,),(,),(,)}

となる.

関係データベースは直積と関連が深い. 高校数学では学ばなかった(と思われる)直積であるが,きっちり概念を押さえておこう(★Quiz5★).

写像#

写像とは,2つの集合間の対応づけを表すものである. 集合Xに属するどの要素も,ルールfで集合Yに属するいずれかの要素に対応づけすることが可能なとき,fを「XからYへの写像」と呼ぶ. fXからYへの写像であることを,以下のように記す.

f:XY

また,写像fによって集合Xの要素xが集合Yの要素yに対応することを,以下のように記す(矢印の種類が異なることに注意).

f:xy

このとき,yを写像fによる要素x像(あるいは値) と呼び,f(x)と記すこともできる.

最も馴染みのある写像の一つは関数である. 例えば,小売店で商品を購入する際には,商品価格xに対して消費税10%分を加算した料金を支払う. 最終的な支払い料金yを計算する関数f

y=f(x)=1.1x

と書ける. 商品価格や最終的な支払い料金は実数であり,関数fは実数から実数への写像になるため,

f:RR

と書くことができる. また,

f:x1.1x

と書くこともできる.

関数ではない現実的な写像の例を示そう. 大学では,学生が履修した科目に対して「優」「良」「可」「不可」の4段階の成績が付けられることが多い. 今,集合Sは学生の集合,集合Cは科目の集合としたとき,集合SCの直積集合S×Cは(考えられうる)学生の科目の履修状況と見なせる(見なすことにしよう). 例えば,S={,,...}C={,,...}とすると,

S×C={(,),(,),(,),...}

といった感じになる.

さて,成績の種別を表す集合をU={,,,}とすると,各学生の各科目に成績を付けるという行為(f)はまさに集合S×CからUへの写像と見なすことができる. よって,以下のように書くことができる.

f:S×CU

定義域と値域#

上で写像f:XYの概念を導入したが,写像元と写像先に名前を付けておくと便利なため,3つの概念を導入する.

1つ目は定義域である. 集合Xから集合Yへの写像fが与えられたとき,集合Xを写像f定義域と呼ぶ.

2つ目は終域である. 集合Xから集合Yへの写像fが与えられたとき,集合Yを写像f終域と呼ぶ.

3つ目は値域である. 集合Xから集合Yへの写像fが与えられたとき,fによって写された集合Xの要素の集合を写像f値域と呼ぶ. 値域はImagefと記される. 値域は少しややこしいが,定式化すると以下のように書ける

Imagef={f(x) | xX}

終域と値域の違いが分かりづらいかもしれないが, 値域は終域の要素(yY)の中でも,y=f(x)を満たすようなxが存在するyの集合を表す. 図にすると以下のようになる(図は「群論への第一歩(結城浩著, SBクリエイティブ)」から山本が書き起こし編集)(★Quiz6★).

写像


クイズ#

Q1. 外延的定義#

以下の集合S1S2S3を外延的定義で記せ. ただし

  • Sname={yamabata,kawasumi,tanabe}

  • 関数f(x)は文字列xを”x@nagoya-c.ac.jp”という文字列に変換する関数

とする.

S1={2x | xN,1x10}

S2={3x | xN,x<6}

S3={f(x) | xSname}

Q2. 内包的定義#

以下の集合S4S5S6を内包的定義で記せ.

S4={3,2,1,0,1,2,3}

S5={3,8,13,18,23}

S6={3,8,13,18,23}

Q3. 和集合,積集合,差集合#

上記Q1およびQ2で扱った集合をもとに,以下の集合の要素を求めよ.

S7=S1S2

S8=S1S2

S9=S1S2

S10=S2S1

Q4. 部分集合#

集合ABCを以下のように定義する.

A={,}

B={,,,,}

C={{,},B}

このとき,以下の1からの命題が真か偽かを求めよ.

  1. B

  2. B

  3. AB

  4. AB

  5. AC

  6. AC

  7. |A|=|B|

  8. |A|=|C|

※ 本問題は書籍「群論への第一歩: 集合、写像から準同型定理まで」に掲載された問題の改題である.

Q5. 直積#

集合SprefおよびScityを以下のように定義する.

Spref={,,}

Scity={,,,}

このとき,集合Spref×Scity の要素をすべて求めよ.

Q6. 写像#

Q5で扱った集合SprefScityを再び用いる.

写像fは集合Spref×Scityから集合Rの写像であり, pSprefcScityに対して,

f(p,c)={1cp0

と定義する.

  1. 写像fの定義域,値域,像を列挙せよ.

  2. S={(x,y)| (x,y)Spref×Scity,f(x,y)=1}となる集合Sの要素を求めよ.