天竺+異王の問題点の整理

2025年1月13日

2025/1/13 駒井めいさんのコメントを受けて追記。
2025/1/17 神無七郎さんの案を追記。


下記の記事に関する現状の整理です。

2025/1/10 18:18 案2を追記しました。2025/1/13 11:45 下記を追記しました。 駒井めいさんのコメントの通り、王手の評価順を手番かどう…
tsume-springs.com
【天竺】
玉(王)の利きが王手をした駒の利きになる。

利き転写の無限ループ

天竺による利きの転写では、実際の利きではなく本来の利きを写すと解釈する場合、下図では利き転写の無限ループが発生し、33王と11角の利きが定まらない。

天竺1234角:角王

この問題の解決策として以下の2案がある:

  • 案1:天竺の利きの転写では本来の利きを写す。王駒からの利きの転写は1回まで可能。
  • 案2:天竺の利きの転写では実際の利きを写す。

いずれの案でも上図の33王は角の利き、11角は変化なしとなる。

なお、2024年12月31日に公開されたfmza(7.03.011版)は、案1に沿って動いている。そのため、案1特有の他の問題が見つからない限りは案1を採りたい。

王手を掛け合う状況で利きが定まらない

下図のように、双方の王駒が本来の利きで王手を掛け合っている状況を考える。
案1と案2のどちらを採用しても、飛王と香王の利きが定まらない。

天竺1234飛:飛車王香:香車王

14香が11飛に王手を掛けている。これを先に評価すれば、11飛は香の利きになる。案1・2のどちらでも、14香は香の利きのままである。

一方、11飛が14香に王手を掛けていることを先に評価すれば、14香は飛車の利きになる。案1・2のどちらでも11飛は飛車の利きのままである。

このように、どちらの王手を先に評価するかによって王駒の利きが変わってしまう。

上図は天竺と複玉を組み合わせたときに生じうる。ただし、fmza(7.03.011版)では「天竺+複玉」は無効化されている。

fmza(7.03.011版)ではさらに「天竺+跳び・走り以外のフェアリー駒複数種」も無効化されている。例えば下図で14Gと指すと王手を掛け合う状況となり、同様に利きが定まらない。

天竺1234G:Grasshopper王鬣:Lion王

14Gと指した局面を考える。
Gによる王手を先に評価すれば、11鬣はGの利きになる(14GはGのまま)。よって14Gは合法。
鬣による王手を先に評価すれば、14Gは鬣の利きになる(11鬣は鬣のまま)。よって14Gは自玉に王手を掛ける禁手。

この問題を解決する方法として、「手番側の王手を先に評価する」もしくは「手番でない側の王手を先に評価する」案を挙げたが、この案には大きな問題があった。

「手番側の王手を先に評価する」として上図を見直そう。
攻方の手番であればGによる王手を先に評価するから、14Gと指せば11鬣はGの利きになる。14Gは合法。
14Gと指せば受方の手番になる。受方の手番なので鬣による王手を先に評価する。よって、14Gは鬣の利きになり、11鬣は鬣の利きである。したがって、鬣で14Gを取れてしまう。14Gが指せたはずなのにGが取られてしまうのはおかしい。

「手番でない側の王手を先に評価する」としても、同様におかしなことが起きる。手番が変わると駒の利きが変わるのがいけないのだ。

つまり、本来の利きで王手を掛け合う状況の王駒の利きは、手番に依存しない方法で定められなければならない

例えば、「飛王>香王」「鬣王>G王」のようにあらかじめ優先順位を決めておく方法が考えられる。ある作品が成立するためには、その作品に使われる王駒同士の順序関係さえ決まっていれば問題ない。しかし一般的に解決するためには、すべての駒同士で順序関係が決まっていなければならない(つまり、すべての駒種を1列に並べる順番を決めておく)。

しかしながら、この方法では例えばユーザーがフェアリー駒を定義したときに困る。駒同士の順序関係をユーザーが自由に決められれば問題ないが、あまり現実的ではないと思う。

fmza(7.03.011版)では「天竺+跳び・走り以外のフェアリー駒複数種」が無効化されているが、裏を返せば天竺ルール下で「Q王/G王」や「通常の玉/G王」のような異王は検討できる。現状のfmza(7.03.011版)ですでに充分な範囲で天竺+異王が使用できると考えるのも自然だと思う。

追記(2025/1/13):しかしながら7.03.011版のfmzaでは、LocustやMaoのように、天竺と併用すると王手を掛け合う状況が生じうるフェアリー駒が使用できてしまう(駒井めいさんのコメント参照)。そのため、王手を掛け合う状況が生じうるフェアリー駒を洗い出し、天竺ルール下でのそれらの使用を無効化するのが望ましい。しかし、そこに労力を掛けて誰がどれくらい嬉しいかは微妙か。

まとめると、現状は以下の方針がある:

  • 本来の利きで王手を掛け合う状況のときに王駒の利きが自然に定まる方法を考える。ただし、手番に依存する方法はNG。
  • 現状のfmza(7.03.011版)が扱えない範囲の異王の実装は一旦諦め、需要が高まったら改めて考える。現状のfmzaでは、無効化されるべきだが無効化されていない「天竺+フェアリー駒」がある。
    • 現状でも「未テスト」のコメントは出力されるので、特に対応はしない。
    • 無効化されるべき「天竺+フェアリー駒」を洗い出し、それらを無効化する。

王手を掛け合う状況で利きが定まるうまいアイデアがあれば、是非ご連絡ください。他にもご意見等あればご連絡いただけますと幸いです。

追記(2025/1/17):神無七郎さんより、本来の利きで王手を掛け合う状況のときに王駒の利きが定まる案をいただきました。


天竺+異王の問題点の整理(https://tsume-springs.com/?p=1777)、拝読しました。
ここでは私の案を提示します。

天竺は玉が王手駒の利きで動くルールなので、玉の利きは次のように決まります。

(1) 自玉に王手が掛かっていれば自玉が王手駒の利きになる
(2) 自玉に王手が掛かっていなければ自玉は本来の利きのまま

従って「着手の前の状態で上記の決定手続きを一度だけ実行する」と決めれば、今回指摘された矛盾は解消できるのではないでしょうか?

例えば鬣王とG王の例図であれば、以下のようになります。(攻方手番と仮定)

  1. G王には王手が掛かっていないので、G王は本来の利きで14に動ける可能性がある
  2. 実際に14Gと指したとする(このときG王の利きは変化しない)
  3. 受方に手番が渡ったとして、着手の前の状態で鬣王の利きの決定手続きを行う
  4. 鬣王にはG王による王手が掛かっているので、Gの利きになる
  5. 変化した鬣王の利きは14Gに届かないので、2.は実際に合法な着手である
天竺1234G:Grasshopper王鬣:Lion王

重要なのは2.の着手後の状態で自玉の利きの決定手続きを再実行しないことです。これにより利きの再転写を防止します。

参考までに、角王と王の例図ならば以下のようになります。(攻方手番と仮定)

  1. 王には角王による王手が掛かっているので、角の利きになる
  2. 角王に王手が既に掛かっているため、手番側既王手の不正局面
天竺1234角:角王

以下は蛇足かもしれませんが、「本来の利き」ではなく「現在の利き」を対象とすると、利きが決定不能になる問題は天竺以外でもありえます。

例えば対面ルールで駒Aと駒Bが向かい合っているとします。
すると次のような無限ループが考えられます。

  1. 駒AはBの利きになり、駒BはAの利きになる
  2. 駒AはBの利きなので駒BはBの利きになる、
    駒BはAの利きなので駒AはAの利きになる
  3. 以下繰返し

今までこれが問題にならなかったのは、「本来の利き」を対象とし「性能変化は1回だけ」という考え方が使われてきたからではないでしょうか?
今回の提案は「着手の前の状態で」という縛りを入れていますが、これは「現在の利き」を対象とすると決定不能の状態が起こりやすいので「性能変化は1回だけ」という条件に更に縛りを掛けようという考えに基づきます。

Friend(響)やOrphan(谺)のような性能変化の再帰的適用を前提とした駒にはまた別の考え方が必要になるかもしれませんが、ここでは踏み込まないことにします。


問題なく王駒の利きが定まる自然な方法のように思います。
他のフェアリー条件やフェアリー駒を使用した際に問題がないか、これまで成立していた天竺特有の手筋や詰上りに影響がないか、念のため確認を続けたいと思います。

上記の案に対するご意見や他のアイデアなどございましたらご連絡いただけますと幸いです。

スポンサーリンク

カテゴリー

springs

springs

フェアリスト

関連記事