2004年 6月 1日 作成 モノ と 集合 (クラス、セット、タプル) >> 目次 (テーマ ごと)
2008年 7月 1日 補遺  


 
● モノ (事物) は、対象として、「名指す」 ことができ、「名」 が対象を代理する。

 モノ とは事物のことをいう。事物は、「ことがら」 とか 「対象」 とか 「エンティティ (entity)」 とか 「オブジェクト (object)」 と、論理的には同義である。事物は、対象として、「名指す」 ことができる。すなわち、記号 (たとえば、文字記号) が対象を代理する。記号を使って記述された対象のことを名辞 (概念) という。命題のなかで、「名」 は、対象を代理する。
 対象には、以下の 4つがある (ホワイトヘッド 氏が提示した考え)。

 (1) 持続する現実的な事物
 (2) 生起する現実的な事物
 (3) 反復する抽象的な事物
 (4) 自然の法則

 
● モノ (事物) として、性質・個体・集合の 3つを考えることができる。

 命題は、「事物が、どのようであるか (how things are)」 を語ることができるが、「事物が、どういう モノ であるか (what they are)」 を語ることはできない。命題のなかで、対象は、以下の 4つの名辞として扱うことができる。

 (1) 属性 (個体に帰属する性質)
 (2) 個体
 (3) 集合 (個体の集合)
 (4) 集合の集合

 属性は、「反復する抽象的な事物」 である。たとえば、名称とか重量とか長さとか色合いとか値段とか日付とか。

 個体は、「持続する現実的な事物」 および 「生起する現実的な事物」 である。たとえば、個々人 (佐藤正美など) とか、しかじかの商品とか、かくかくの受注とか。個体のことを、インスタンス (an instance) とか、オカレンス (an occurrence) ともいう。

 集合は、「反復する抽象的な事物」 である。たとえば、個々人の従業員を集めた 「従業員」 とか、かくかくの受注という出来事を集めた 「受注」 とか。個体に対して、共通の属性 (性質) を使って統括した概念なので、タイプ (type) ともいう。

 
● 数学上、集合として、セット 概念と クラス 概念がある。
  2つの集合 (A と B) があれば、それらを メンバー とする集合 { A, B } を作ることができる。

 形式的体系 T の 「解釈」 とは、T = (U, R) のことである。U は、空でない集合とし、R は、U 上の関係 (2項関係) とする。基本的な集合の概念には、以下の 2つがある。(注 1)

 (1) セット (set)
 (2) クラス (class)

 セット と クラス の違いは、数学的には、「部分集合の公理 (axiom of separation)」 を前提にするかしないか、という点にある。「部分集合の公理」 とは、集合を考える際、1つの集合 (たとえば、集合 a) を導入して、あまりに大きくならない集合 (集合 a よりも小さい集合) を扱う前提のことをいう。すなわち、{ x | x ∈ A (x) } ──性質 A をもつ集合──の代わりに、{ x ∈ a | A (x) } ──集合 a のなかで、性質 A をもつ集合──の形を集合にすることを前提にした。
 「部分集合の公理」 を前提にした集合が セット 概念である。これに対して、{ x | A (x) } を クラス 概念という。

 2項関係を関数として記述すれば、R (a, b) となる。
 関係項 (a および b) として、上述の対象 (属性、個体、個体の集合、集合の集合) のいずれを使うこともできる。

 まず、属性値の集合を セット として扱って、(属性値の集合間の) 関係を使って個体を記述することができる。言い換えれば、{ x ∈a | A (x) } および { y ∈ a | B (y) } という集合 (セット) を考えて、a は、「すでに、記号化されている」 という前提に立って、R (x, y) として、a を記述する。R (x, y) は、セット 概念では、集合 A (x) と集合 B (y) との 「直積集合 (A×B) 」 のことである。

 あるいは、セット 概念の前提とされている 「対の公理 (axiom of unordered pair)」 として考えて、2つの集合 (A と B) があれば、それらを メンバー とする集合 ω ── { A, B } ──を作ることができる、と考えてもよい。つまり、A と B が集合なら、ω も集合である。そして、ω のなかの メンバー は、並びを問わない──したがって、{ A, B } でもよいし、{ B, A } でもよい (「集合の集合」)。

 
● 属性値の集合を考えて、「集合の集合」 として、個体を記述したのが コッド 関係 モデル である。

 たとえば、従業員番号の セット (メンバー は、001 とか 002 という属性値) と従業員名称の セット (メンバー は、佐藤正美とか稲森いずみ という属性値) を前提にすれば、直積集合として、以下の関係を作ることができる。

   R (001, 佐藤正美).
   R (002, 稲森いずみ).

 直積集合 (a, b) ──つまり、従業員番号の セット と従業員名称の セット の対──のことを タプル (tuple) という。タプル も集合である。タプル のなかでは、或る属性値に対して、他の属性値は、「高々」(注 2)一意に対応しなければならない。したがって、タプル は、1つの モノ の 「意味」 を記述することができる。

 形式的構成を作る際、「集合」 として セット 概念を使い、ロジック として 「第 1 階の述語論理」 を使うことが多い。
 属性値集合を セット とすれば、主体集合 (直積集合として記述されている モノ) の間に成立する関係は、述語論理の因果律 (p ⇒ q) を使って記述される。すなわち、p を前提にして、q が成立する。たとえば、「受注 ⇒ 出荷」 とか(注 3)。言い換えれば、因果律 (包摂関係) を使って、モノ の間に成立する関係の 「意味」 を記述する。

 以上の考えかたを使って、データ 構造と代数演算を提示した モデル が、コッド 氏の提示した 「関係 モデル」 である。
 関係 モデルでは、タプル のなかに、具体的な属性値を代入して構成された データ 集合を 「テーブル (table)」 という。
 テーブル では、縦列 (column) がセット (属性値集合) を示し、横列 (row) が個体を示している。
 したがって、テーブル は、以下の 2つの従属性を使って、「意味」 を示している。

 (1) テーブル (row) のなかでは、或る属性値 (キー) に対して、他の属性値は、「高々」 一意に対応する。
   これを 「関数従属性」 という。
 (2) テーブル 間の因果律として、或る テーブル のなかの キー は、他の テーブル にも存在しなければならない。
   これを 「包摂従属性」 という。

 
● 個体 (事物、事象) の集合を考えて、集合を entity として考えたのが、チェン ER手法である。

 セット として個体の集合を考えて、直積集合として関係を考えて、「構造」を記述する考えかたが、チェン 氏の提示した ERモデル である。チェン ER手法も、(コッド 関係 モデル と同じように) 直積集合 (あるいは、「対の公理」) を使っている。チェン ER手法は、1つの集合の単位を entity として考え、entity として、人とか場所とか受注などの事象を例示している。すなわち、直積集合 R { S1, S2 } として、S1 および S2 を、従業員とか部門とか受注とか契約という entity を考えている。そして、従業員や部門などの事物を 「主体型」 entity として扱い、受注や契約などの事象を 「関連型」 entity として扱う。

 直積集合 (セット 概念) を使っているのなら、当然ながら、集合論の代数演算が成立するはずであるが、チェン ER手法では、集合論の代数演算は提示されていない。チェン ER手法は、「現実の事態を記述するための意味論 (現実世界は、モノ と関連を使って記述できるということを示した概念設計手法)」 であって、具体的な データベース (たとえば、NDB とか RDB とか) を対象にした物理設計手法ではない、と言われている。そうだとすれば、数学の手法 (直積集合) を、わざわざ、使うこともない、と小生は思う。

 直積集合を、現実の世界を対象にして適用するなら──少なくとも、企業が営む事業を対象にするなら──、「関連型」 entity が、或る系列を作ることを──順序対として扱わなければならないことを──公理として提示すべきだし、かつ、「主体型」 entity には、包摂関係が成立することを──たとえば、従業員の サブセット として、正社員や パート 社員がいることなどを──記述できるような ERD にすべきだったのではないか。
 チェン ER手法が、数学の直積集合を使った意義を小生は理解できない、、、。

 
(注 1)
 数学上、セット 概念と クラス 概念の違いは、公理系の違いとされている。
 セット 概念は、ZF の公理系 (ツェルメロ・フレンケル の公理系) を前提とする。
 クラス 概念は、BG の公理系 (ベルナイス・ゲーデル の公理系) を前提とする。

(注 2)
 数学上、「高々」 というのは、「at most (多くとも)」 の意味である。
 したがって、「高々 1つ」 というのは、多くとも 1つであって、ゼロ (1つもない) でもよい。
 コッド 関係 モデル では、タプル と同じ次数の空集合 (null) を前提にしている。たとえば、タプル (従業員番号, 部門 コード) では、R (φ, φ) が前提とされて、タプル のなかの属性値のいずれかが null であってもよい、とされる。

(注 3)
 「p ⇒ q」 (p ならば、q) は、集合論では、「p ⊃ q」のこと。
 流派によって、「p ⊂ q」 と記述することもある──記号の向きが反対になっている点に注意されたい。
 「p ⊂ q」 は、「p ∈ q」 のこと。



[ 補遺 ] (2008年 7月 1日)

 本 エッセー を、いま、読み返してみて、締まりのない ダラダラ した文を綴っているのを感じて、恥ずかしい (苦笑)──読者も、本 エッセー を読みにくかったと想像します (申し訳ない)。しかも、いくつかの文は、misleading だったので、本文の いちぶ を訂正しました──たとえば、「セット 概念には、第 1 階の述語論理が使われる」 (当初の文) は、misleading どころか、間違いであると言ってもいいくらいだし、「集める」 と 「並べる」 という数学記号も、直積であれば、「並べる」 記号 [ R (a, b) ] を使わなければならないにもかかわらず、一般形の R { s1 ∈ X1, s2 ∈ X2,・・・, sn ∈ Xn ∧ P (s1, s2,・・・, sn) } のなかで、特徴関数 [ 並べる関数、P (s1, s2,・・・, sn) ] を はしょって、「集める」 記号 R { a, b } を おおざっぱに使っていました。それらの misleading な文および間違いを訂正しました。

 さて、コッド 関係 モデル 関する記述は、いまから振り返れば、以下のように簡明に まとめたほうが良かった、と思っています。

 (1) セット 概念と第 1 階の述語論理を使っている。
 (2) セット は、属性値集合である。
 (3) セット を対象にした直積を作って、「個体」 を指示する。
   (「直積」 が ソリューション であるかどうかは、「F-真」 を前提にする。)
 (4) 直積で構成された 「個体」 のあいだの関係は、包摂関係を使う。

 コッド 関係 モデル では、「個体」 を関係 (直積) で構成したので、「個体」 のあいだに生じる構成に対して包摂関係を使いましたが、勿論、「個体」 間の関係を、さらに、第 2 階の文法を適用するという ほかの やりかた も使うことができます──コッド 氏自身も、1979年の論文で、第 2 階の文法を考慮しているそうです [ 私は、その論文を直に読んでいないことを付言しておきますが ]。第 1 階の文法のなかで、意味論として、すべての 「個体」 の 「F-真」 が験証できるのであれば、それらの 「個体」 間の関係に対して、構文論上、第 2 階の文法を適用しても妥当であるとは思うのですが、自然言語を使った 「情報」 の 「意味の構成」 を記述するのに、第 2 階の文法が有用かどうかは争点になると思います。

 確かに、第 1 階の 「F-真」 (あるいは、意味論上の 「真」) は、第 2 階で 「L-真」 (あるいは、構文論上の 「真」) として扱うことができるのですが、事業過程・管理過程の 「構造上の妥当性」 を問うために、第 2 階の文法を導入しなければならないかといえば、私は、「いちぶの現象」 を除いて、導入しなくても良いと判断します。「いちぶの現象」 というのは、「関数の 『入れ子』」 現象です──すなわち、f (x) に対して、 G (f) が起こる現象で、たとえば、「one-header-many-details (以下、HDR-DTL と略称)」 の構成です。

 「one-header-many-details」 構成は、多値関数 (many-value) として考えることもできるのですが、多値が 「共時的(synchronique)」 に起こる状態で、かつ、ひとつずつの detail が後続する事態に単独で関与するという現象は、多値関数の 「OR 関係 (以下、MOR と略称)」 (或る一時点で、many-value のなかから、排他的に、ひとつの値のみが成立する事態で、たとえば、商品に関して、商品単価が複数 [ 正札、割引単価など ] があるという現象) とは、意味論上も構文論上も、ちがう形態です。

 多値関数の 「AND 関係 (以下、MAND)」 は、寧ろ、「関係 (one-header-many-details 関係) が、そのまま、個体 (ひとつの事態) になる」 と考えたほうが、言い換えれば、「多値関数」 (ひとつの関数が複数の値をもつこと) というよりも、「合成関数」 (ふたつの関数が合成された写像関数) として考えたほうが、意味論上、理解しやすいでしょう。ときには、「HDR-DTL」 が階を構成することも生じます──すなわち、ひとつの 「HDR-DTL」 のなかで、ひとつ DTL が HDR になって、さらに、DTL をもつという構成です。こういう構成は、具象 カテゴリー を使ったほうが理解しやすいでしょうね──具象 カテゴリー とは、或る数学的構造をもつ集合をあつめた 1つの クラスと、そのような集合間に成立する関数の クラス との コンビネーション のことをいい、この関数の クラス を ファンクター といいます。つまり、「HDR-DTL」 は、(多値関数というよりも、) ファンクター が 「個体」 を示すと考えたほうが理解しやすいのではないでしょうか。

 さて、私は、自然言語で記された 「情報 (帳票、画面など)」 を対象にして、「意味の構成」 を記述するために、コッド 関係 モデル に対して、意味論を強く適用した モデル (TM、および TM’) を作りました。その モデル は、「命題論理」 と 「関係の論理 (第 1 階の論理)」 を前提にしたのですが、それらの前提のみでは、「HDR-DTL」 構造を 「整合的に」 説明することができなかった、、、。「HDR-DTL」 構成は、「合成関数」 (あるいは、具象 カテゴリー) を使わなければ、整合的に説明できない。そのために、TM は、当初に前提として定立した ロジック (「命題論理」 と 「関係の論理 (第 1 階の論理)」) を超えてしまいました。そういう意味では、TM は、(セット 概念に限らないで、) クラス 概念を導入している、と言って良いでしょう。





  << もどる ベーシックス すすむ >>
  データベースの基礎知識