衛門督・伊予介系列が孤立してしまう事象

源氏物語全系譜6.1.ZELの法定親族図 #1 光源氏で以下の図のように衛門督系列と伊予介系列が孤立してしまうという事象が発生している.

image

伊予介系列は当初は軒端の荻を優先ノードとして始系列の一院系列に繋がっているが,上図では先祖ノードの伊予介を優先ノードとして衛門督系列の従系列に変わっている.衛門督の優先ノードは空蝉で一院系列の従系列になっているが,空蝉(1)が結婚を持っているため消去できないので物理的なコネクションを確立することができない状態だ.

これを解決する最善策は,衛門督系列を逆に伊予介系列の従系列とし,伊予介系列では軒端の荻を優先ノードに立てて一院系列につなぐという構図だが,現行論理ではそこまでのことはできない.軒端の荻は上図では一院系列の軒端の荻(0)とは世代差がある.これは,空蝉と軒端の荻がどちらも光源氏の配偶者であり,同世代に並ぶことを求められているためだ.しかし,衛門督を伊予介の従系列にすれば軒端の荻の世代を調整することも可能となる.

ともかく,現状で「主従系列間の物理コネクションが確立されていない状態」が検出できるようにする必要がある.「系列間の物理コネクション」を以下のように定義してみよう.

  1. 系列間物理コネクションには,①(LDRを含む)消去された仮ノードによる連結と,②BTWによる連結の2種がある(それしかない)
  2. 系列優先仮ノードと実ノードは仮ノードがLDRの場合を除き,同世代でなくてはならない
  3. 通常の場合,仮ノードは不可視,実ノードは可視である BTWによる連結では仮ノードが可視となる場合がある 逆婚姻関係では実ノードが不可視,仮ノードが可視となる
  4. 通常仮ノードと実ノードは同一カードを参照しているが,場合によっては別の(配偶者)カードを参照することもある

TRIBEBOX::IsConnectedとその下位関数DoesMajorTribePathExistは本来上記の検査を実施することを目的としているのだが,かなり甘いものになっている.DoesMajorTribePathExistでは検査の重複を避けるために始系列参照パスフラグ(majortribepath)というのを置いているが,あまり当てにならないので廃止した方がよいと思う.

TRIBEBOX::hasPhysicalConnectionという検査関数を作ってDoesMajorTribePathExistから呼び出すようにしてみた.この結果,衛門督系列では系列間の物理コネクションが完全に失われているということがわかった.さて,それではどうすればよいのか?一つの考え方としては,衛門督系列の空蝉(1)が結婚を持っているのに系列優先ノードになること自体を誤りとするという立場があり得る.この場合は衛門督は別の優先ノードを探さなくてはならないので,空蝉(1)の結婚から伊予介の従系列になっている可能性がある.

これはこれで一つの解決とは思われるが,結婚を持っているノードは系列優先ノードになれないという縛りは少しきつ過ぎるような気がする.系列優先ノードがそれしかない場合,相手のある結婚なら相手方に渡すという方策もあり得るが,単身婚の子どもがいる場合にはそれもできない.単身婚の子どもがいる場合でも,複数の親がいればそちらに渡すことも可能であるかもしれないが…

逆に言えば,単身婚の子どもがいてかつ親が一組しかない場合には優先ノードにはなれないということだろうか?いや,そんなはずはないはずだ.現行では逆婚姻関係というのも認められているのだから,従系列に本人ノードを残すという結合形態もあり得るのではないか?

グラフ理論的にこの問題を解くことを考えてみよう.まず,「すべての系列はなんらかの方法で(少なくとも1つの)他系列との物理的なコネクションを持つ」としよう.また,「従系列→主系列という方向は任意に変更可能」であるとしてみよう.この2つの仮定が成立するとすれば,以下の手順でつねに連結な有向木を得ることができる.

  1. すべての系列につき,任意の物理コネクションを確立する
  2. 系列を頂点とし系列間の物理コネクションを枝とするグラフGを生成する
  3. グラフGが連結ならば,→5に進む
  4. グラフGを連結成分に分解し,連結成分間の物理コネクションを確立する→グラフGが連結になるまでこれを繰り返す
  5. グラフGの枝に始系列からの向き付けを与え,有向木に転換する

ステップ2で生成されるグラフGが連結であるか否かが問題だ.もし,このグラフが連結であれば,そのグラフ上の任意の頂点を根点とする全域木が存在することは証明されているから,それを有向木に転換するのは難しくない.仮に,グラフGが連結でなかったとしても,それを連結成分に分解し,連結成分間の任意の物理コネクションを確立することは可能と考えられるから,この方法は確実に成立すると言ってよいだろう.

具体的な事例で考えれば,今の場合はステップ4で衛門督+伊予介系列とそれ以外の系列という2つの連結成分に分解されるはずだ.この中で2つの成分を連結できる要素は軒端の荻しかないということになるはずだから,衛門督系列→伊予介系列に向き付けを変更した上で,軒端の荻の物理コネクションを確立するための操作を実施するということになるのではないだろうか?かなり厄介そうではあるが,これができればグラフが非連結になるという事象は根絶されることになるはずだ.抜本的な解決策としてはこれしかないような気がする.

「結婚を持っているノードは系列優先ノードになれないという制約」の妥当性を見るために,空蝉+伊予介の結婚を解消し,その代わりに空蝉に単身婚の子どもを与えて描画してみた.

image

上図で衛門督系列の優先ノードはこれまで通り空蝉だが,問題なく接続している.従って,結婚を持っているノードは系列優先ノードにはなれないというのは正しくない.伊予介+空蝉の結婚の描画が難しいのは,世代的な矛盾(重婚同類循環)があるためと考えられる.

TRIBELIST::SortTribeListにはかつては「系列木の枝グラフをトラバースして線形枝リストを生成し系列枠の全順序を決定する」という処理が入っていたのだが,@20180821 辺りで廃止されている.⇒コードは残っている.TOPOLOGY::MakeLinearEdgeListだ.TribeTreeGraph,copygraph,tempgraphの3つの枝グラフを使っている.TribeTreeGraphはTRIBEBOX::setMajortribeで主系列を設定するタイミングで従系列→主系列の枝を追加している.

既存論理の瑕疵を発見した.BTWを構成するときには,事前にNAMEBOX::IfBTWPossibleで予備検定を行い,実施可能と判断してから実行に移るようになっているが,この関数の中ではBTWの当事者ノードが同世代であることをチェックしているにも関わらず,伊予介と空蝉のケースではそれから漏れていた.系列間のBTWが生じるとそれを使って系列接続関係が再構成され,系列ポテンシャルを調整して実仮ノードの世代を一致させるための系列シフトが実行される.伊予介系列は本来軒端の荻の仮ノード消去で一院系列に接合していたものが破棄されて衛門督系列に従属するように変化しているのはこのためだ.

BTW当事者の世代一致が無視されているのは,「左手本人仮ノードが単親婚を持つ場合にはつねにBTWを構成する」という理由による.この場合には無条件でBTW成立と判断しているが,明らかにやり過ぎと考えるしかない.「当事者の世代一致」という条件を「左手本人仮ノードが単親婚を持つ場合」よりも前方に配置してこのような誤動作を防止するようにした.これにより,孤立しているのは衛門督系列だけになった.

image

現状ではこの系列は有効な系列優先ノードを持たない状態なので,グラフを使った系列連結検定の対象となり,結合相手として系列順位では下位に当たる伊予介系列を見出すことができるだろう.そうすれば,この図面には非連結の部分がなくなり,図面として完成する.多分これがもっとも合理的な解法ではないかと思う.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA