2012年1月7日土曜日

教師は人間であり,人間は動物である?

素朴なオントロジーでは,教師の上位クラスに人間があり,その上位クラスに動物がある.その意味するところは,「すべての教師は人間である」,そして,「すべての人間は動物である」.一見,もっともである.ある人間が死亡して人間でなくなるとどうなるのか.当然,動物ではなくなる.では,ある教師が退職して教師を辞めるとどうなるのか.人間でなくなる?.オントロジーは分類とそれによる推論のシステムであるとされるが,単純な分類ではこのような基本的な問いに明確な推論を与えない.

素朴な集合論およびそれに基づく単純な論理でも同じ問題を抱えている.分類が集合とその部分集合の階層を示すと考え,「集合 S の部分集合の要素はいずれも S の要素である」という通常の部分集合の定義に従えば,教師を辞めても人間で無くなるかどうかは何とも言えないのと同様に,人間をやめても動物でなくなるかどうか,何とも言えない.しかし,数学教育でよく利用されるVenn図では,部分集合に書かれた点が消されればもとの集合の点でもなくなってしまうため,「教師を辞めれば人間を止める」解釈がされてしまう.

このような難点は,データベースやUML,そしてオントロジーでも古くから意識されているようで,それを避けるために,「役割role」概念なるものが導入される.「教師」概念は「人間」や「動物」という(基本)概念とは異なる,というのである.しかし,役割概念という特殊な概念を考えるのはどうも恣意的でアドホックな感が否めない.

「役割」というのは属性,つまり(圏用語での)射であって,(圏用語での)「対象」ではない.その意味では,基本概念と異なる,といえる.人間(対象)には,たとえば「職業」という属性(射)があって,その一つの要素として「教師」がある,とすると,値を「教師」とする「職業」(射)の逆をとれば,それは「人間」(対象)の部分となり,したがって,「すべての教師は人間である」という命題を作る.しかし,教師を辞めたからといって,もとの人間が人間で無くなるわけではない.一方,「人間」は「動物」の下位クラス(前稿参照)だとする.「人間を止める」ということは,認識後の要素でなくなると言うことだと考え,(「人間」であることが不明になるのと同様)「動物」であるかどうか,不明(null)ということになる.ただし,ここで,「動物」というのは単純に前稿でいう上位クラスに相当せず,上位,下位クラスをあわせた拡大対象に相当すると考える.

OOPのプログラミングでは,要素(インスタンス)がなくなるというような変化が記録されないので,以上の議論は表面化しないが,データベースでは,事実グラフとしてその変化を反映するために,重要な問題となる.事実グラフ(データベースのテーブル)は,当然,認識されたものについてのグラフであるから,対象要素がnullとされた場合,その行はテーブルから排除(つまり,削除)される.

たとえば,「正社員」「派遣社員」の例でいえば,どちらかを辞めたとき必ずしも社員を辞めることにならない,つまり,正か派遣かが社員の単なる属性なのか,それともどちらかを辞めれば自動的に社員でなくなる,つまり部分クラスなのか,それを明確にしなければならない.属性(「雇用形態」?)ならば,社員テーブルの雇用形態の列の欄を更新してnull(あるいは更新された新雇用形態)にする操作をする.一方,部分クラスならば,社員テーブルからその行を削除する操作を行う.Railsでは,部分クラスのグラフ化にSTIを使用し,type というメタデータとして部分クラスを表すので,見かけ上,属性扱いになり,それだけではその違いが表せないが,どちらかを辞めた場合は,雇用形態をnullにすることで留めずに,その行を削除することにより,部分クラスであることを明確にするべきであろう.なお,STIは,拡大対象のグラフ化であることに注意.

以上は,「なくなる」ケースについて議論したが,「生じる」ケースも同様である.たとえば,「教師になる」,「人間になる(生まれる)」など.これらの出来事および関連事項は,圏論でいう作用actionをもとにして論じることが出来るが,それについては後述予定.

0 件のコメント:

コメントを投稿