単親婚を持つノードはつねにBTWの左手本人となる

午前7時半起床,曇り.日清のチキンラーメン+生卵.「三角BTWの導入により配偶者多重を恒久的に解決する」という課題は実装をほぼ終えてある程度動作しているが,まだ抜けているところがある.N一族家系図をN氏でソートしたときN氏の配偶者3人のうち,UYが外に出てしまうという事象はUYが単親婚を持っている限り避けられない.単親婚の子ども枠を保持する場所がなくてはならないからだ.単親婚を持つ配偶者が外に出てしまうのは「仕様」だが,単親婚に配偶者を追加して有夫婚に変えることで回避できる.

この図面は多重ゼロとなっているのですでに「瑕疵のない図面」を実現できているが,単親婚を有夫婚に変えるところで多重が発生する.UYは単親婚の子ども2人を持っているが,2人の子どもはそれぞれ父親が異なる.仮に2人の子どもの父親が同じとすれば問題は生じない.また2人の子どもに別々の父親を登録した場合にも問題なく描画できる.問題は1人の子どもに父親を与え,もう1人を単親婚に残した場合だ.

このような状態でUYがN氏のボックスから出た状態になるのは避けられないとしても,UYのカードが3枚も出るという状況に陥るという点が問題だ.拡大して見てみよう.

image

多重になっているのはCRだ.CRの単親婚は基準ノードとBTW結合されているが,それ以外の2つの結婚は放置されている.この問題を片付けるためには,もっと強い規則が必要と思われる.つまり,「基準ノードに関わりがあるかによらず,単親婚を持つノードはつねにBTWの左手本人としなくてはならない」.言い換えれば,「本人ノードの配偶者の別の本人仮ノードが単親婚を持つ場合には,そのノードとBTWを組まなくてはならない」ということだろう.

NAMEBOX::IfBTWPossibleの冒頭で「左手本人仮ノードが単親婚を持つ場合にはつねにBTWを構成する@20190131」を判定するようにした.これは最高度の優先度を持つルールと言ってよい.多分これですべての問題は片付いたのではないかと思う.あとはBTW連結線の欠けている部分を補うだけだ.この連結線が描画できないのは,配偶者が左手本人になっているためだ.btwrightboxを「左手枠配偶者を左手本人とするBTW拡張@20190130」に対応修正することで問題なく描画できるようになった.

これで一件落着か?と思われたが,まだN一族2Xで多重が発生している.

image

単純に仮ノード消去できるような局面であるように見えるのだが… UnErasablecで「家内婚左手本人は消去不可」という理由で残されている.この制限を取り除けば問題なく描画できる.

image

本妻タケは佐藤家の実子で均との結婚しか持っていないが,均が婿養子であるため「家内婚」を構成している.従来論理ではこのような場合にはその家内婚がゴールド婚の場合のみ左手本人の消去を認めていた.これまでの論理では家内婚は右手本人預かりとなっていたためと考えられる.左手本人は独自の結婚を持つ可能性があり,そのような場合には仮ノード消去できない状態になると考えられるので妥当な規則と思われる.しかし,「家内婚は左手本人預かりとする@20190126」というオプションの元では事情は変化する.

NAMEBOX::IsMukoYoshiという関数は右手/左手に関わりなく家内婚当事者の場合は真を返している.実際,今のケースではタケ(0)は右手本人だ.一般に仮ノード消去の対象となる本人ノードは「空手」でなければ消去されないと考えられるのでこの制限はまったく不要と考えてよいと思われる.この問題は多分これで解決したものと思われるが,まだ完全には収束していない.本妻タケでソートすると,今度は後妻コウで多重が発生する.

と言っても多重カードは画面左上に隠蔽された状態で表示されている.かなりおかしな状態になっている.最初にMakeUpTreeのステージ【8】実ノード参照可能であるかどうかをチェックで系列優先実ノードが隠蔽状態になっているとして,停止する.障害が起きているのは[系列枠]: #581 odr=5 HM=0 先祖=#364 野原太郎(0)[5] 優先=#362 後妻コウ(0)→#617 後妻コウ(1) →主系列#509:佐藤家.つまり,「最初から悪い」状態になっているものと推定される.

image

妻コウの結婚は一つだけだ.均はタケと家内婚を組んでいるので,均+コウの結婚はBTWとなり,子どもはコウの預かりとなる.優先実ノードのコウ(1)は家内婚配偶者であるために隠蔽されているのだろう.この接続関係はPRIME_BTWRIGHT(BTW右接続関係:両手に花右手本人→左手本人)になっていると思われるが,調整されていないのではないだろうか?それ以前の問題として,TRIBEBOX::GetRealnodeという関数はかなりできが悪いので書き換えが必要だ.均が基準ノードの配偶者であるため,均+コウは配偶者の配偶者預かりとなって移転している.

CARDLINK::getProxyではつねに仮ノードを可視化して返していたが,隠蔽ノードは可視化しないようにした.これでMakeUpTreeのステージ【2】系列優先仮ノードと優先実ノードを設定するでSetupPrimaryNodeにより系列優先実ノードを設定しようとしたとき不可視ノードであるために停止するようになったが,MARGBOX::GetUpperNodeではSUWが発生するようになった.フローが変わってしまったようだ.CARDLINK::getProxyで隠蔽ノードは可視化しないようにするとフローが変化してしまう.この関数はかなり初期から使われているものなので現状のままとするしかなさそうだ.

CancelGoldenCoupleでゴールド婚をリセットしてもフラグが立ったままという現象があるので,まずこれを片付けておこう.障害が起きているノードは均(0)#210.結婚チェーンが空になっている.ただし,右枝には結婚枠が入っている.結婚チェーンが不良ということになる.どうもこのノードはTRIBEBOX::MakeUpTreeを通っていないようだ.このノードはHAVESAMEPARENT属性を持つ,つまり家内婚配偶者だ.

BTWの入口でCancelGoldenCoupleを実行しているが,この関数の主語は本人ノードであることを仮定している.今回のBTW拡張で配偶者が左手本人になる場合が発生しているのでそれに対処しなくてはならない.NAMEBOX::CancelGoldenCouple自体を両用可能であるように作り変えておくことにしよう.これでとりあえず障害は解消した.さて,問題はTRIBEBOX::SetupPrimaryNodeで系列優先実ノード候補が隠蔽されている場合の措置だ.隠蔽ノードが優先実ノードになる理由は以下の通りと考えられる.

  1. 系列分解時の野原系列の優先仮ノードはコウ(0),優先実ノードはコウ(1)になっている この時点ではコウ(1)は均(0)の配偶者
  2. 本人ポジションの均(0)は婿養子なので本妻タケ+均(4)は家内婚を構成する
  3. 本妻タケは基準ノードなのでその配偶者均の結婚は配偶者の配偶者,今の場合は後妻コウの場所で展開される
  4. 均+コウの結婚は野原系列で均(4)+コウ(0)のように展開される
  5. 均の多重カードを削減するためにBTWが実施され,均(4)はBTW右手婚配偶者として消去される
  6. 系列分解時の野原系列の優先実ノードコウ(1)は展開されなかったため,無処理で隠蔽リスト上に置かれたままになっている

この無処理ノードコウ(1)を代替する優先実ノードを決める論理は以下のようなものになると考えられる.

  1. 優先実ノードが隠蔽リスト上にあって,関係=未定であるとすればこのノードBが関係する結婚A+Bが展開されなかったことを意味すると推定される
  2. この未処理結婚リンクは実ノード候補Bの結婚リンクMから取り出すことができる また,この実ノードの属する系列Kも取り出すことができる
  3. 優先実ノードBはこの結婚枠では配偶者であったと推定されるが,結婚枠Mが配偶者側で展開されているため主客が逆転しているので,この結婚枠の現在の配偶者Aが求める代替優先実ノードになるものと推定される
  4. この推定に従いAの仮ノードを走査して所属系列がKであるようなノードがあれば,それが求める代替優先実ノードである

まず,これで一応の解になっているのではないかと思う.これ以上複雑な手順が必要になるか否かはいまのところ分からない.原理的にはこれで十分ではないかと思われるが,今のところまだ証明は得られていない.下図は均でソートしたもの.

image

これを本妻タケでソートすると下図のようになる.

image

まずまず,妥当なのではないかと思う.11月初旬に掛かった自家系図に関わる改修はほぼ完了したと見てよい.リリース版を起こして少し走らせてみよう.ダメだ.まだ大量の障害が残っている.検定2019-01-28には543本の障害サンプルが入っているが,ほとんど解けていない模様だ.終わった.

image

20本しか減っていない.どうもまだまだという感じだ.机上に反例が4本あるのでまず,これから掛かることにしよう.ダメだ.デバッグモードで再現できない.リリースモードではTRIBEBOX::Groupで停止する.Check文が残っていたためだ.

image

TRIBEBOX::SetupPrimaryNodeで代替実ノードの取得に失敗している.反例はBUG19-01-28 08-11-48.ZELで障害が起きているのは#457摂政太政大臣@127 系列.優先ノードは#288玉鬘(0)だが,結婚枠は配偶者を持っていない.「左手枠配偶者を左手本人とするBTW拡張@20190130」を止めてみよう.ダメだ.「家内婚は左手本人預かりとする@20190126」も止めてみる.「基準ノードの子ども枠はBTW不可とする@20190129」まで止めてみたが変わらない.

コメントを残す

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

CAPTCHA