問題一覧 > 教育的問題

No.2398 ヒドラ崩し

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 5
作問者 : 👑 p-adicp-adic / テスター : testestesttestestest
0 ProblemId : 8882 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-07-26 17:51:09

問題文

$2$ 種類の文字()のみからなる文字列がヒドラであるということを以下のように再帰的に定義します:

  • 空文字列はヒドラである。
  • 任意のヒドラ $h_0$ と $h_1$ に対し、$h_0$ と $h_1$ をこの順に結合した文字列はヒドラである。
  • 任意のヒドラ $h$ に対し、(と $h$ と) をこの順に結合した文字列はヒドラである。
以下、集合などの再帰的定義について詳しくない人向けの説明を書きます。(クリックで開く)

 

$X$ を集合とします。例えば $X$ は特定の文字のみからなる文字列の集合などです。今回説明するのは、$X$ の部分集合などを再帰的に定義する際の数学特有の言い回しです。

例えば $X$ の要素 $c$ と非負整数 $n_0,m_0,n_1,m_1$ と写像 $F_0 \colon X^{n_0} \times X^{m_0} \to X$ と $F_1 \colon X^{n_1} \times X^{m_1} \to X$ を用いて次のような書き方をすることがあります:

 

$X$ の部分集合 $A$ を以下のように再帰的に定める:

  • $c \in A$ である。
  • 任意の $(a,t) \in A^{n_0} \times X^{m_0}$ に対し、$F_0(a,t) \in A$ である。
  • 任意の $(a,t) \in A^{n_1} \times X^{m_1}$ に対し、$F_1(a,t) \in A$ である。

 

これはあくまで例であって、今回は $3$ つの条件としましたが一般には $3$ つとは限りませんし、写像を用いるのではなく関係を用いることもあります。再帰的定義の一般の定式化[1] 6.1.1 Definitionはかなり抽象的なので、今回はこの問題を解く上で必要な例のみを考えることにします。

ここで重要なのは、この定義文は $A$ が単に $3$ つの条件を全て満たす $X$ の任意の部分集合であるという意味を持つのではなく、次の定義文を表すということです:[1] 6.1.2 Definitionおよびその直後の段落参照

 

$X$ の部分集合 $A$ を、以下の $3$ 条件を全て満たす $X$ の部分集合 $B$ 全体の共通部分と定める:

  • $c \in B$ である。
  • 任意の $(a,t) \in B^{n_0} \times X^{m_0}$ に対し、$F_0(a,t) \in B$ である。
  • 任意の $(a,t) \in B^{n_1} \times X^{m_1}$ に対し、$F_1(a,t) \in B$ である。

 

$B = X$ とすると確かに上の $3$ 条件を満たすので、条件を満たす $B$ 全体の集合は空でなく共通部分が定義されます。そして $A$ は $3$ 条件を満たす $B$ のうち最小のものである、ということが結果的に従います。

このように、部分集合の再帰的定義はただの条件の列挙ではなく最小性も含意するよう約束されていることに注意しましょう。ただしこれはあくまで再帰的定義に限った約束であり、通常の定義では最小性はもちろん含意されませんし、そもそも再帰的定義のような自己言及を通常の定義で行うと多くの場合循環論法となり定義が破綻します。

 

さて、$X$ 上の $1$ 項関係は $X$ の部分集合と等価であるため、$X$ 上の $1$ 項関係の再帰的定義においても同様の規則が適用されます。具体的には、

 

$X$ の要素が良い項であるということを以下のように再帰的に定める:

  • $c$ は良い項である。
  • 任意の $(a,t) \in X^{n_0} \times X^{m_0}$ に対し、$a$ の任意の成分が良い項であるならば、$F_0(a,t)$ も良い項である。
  • 任意の $(a,t) \in X^{n_1} \times X^{m_1}$ に対し、$a$ の任意の成分が良い項であるならば、$F_1(a,t)$ も良い項である。

 

のように「良い項である」という $1$ 項関係の再帰的定義を書いた場合、これは「良い項である」という述語が $3$ 条件を満たす任意の $1$ 項関係を表すという意味ではありません。上の定義文は次の定義文と等価なものになります:

 

$X$ の要素 $x$ が良い項であるということを、以下の $3$ 条件を全て満たす $X$ の任意の部分集合 $B$ に対し $x \in B$ が成り立つということと定める:

  • $c \in B$ である。
  • 任意の $(a,t) \in B^{n_0} \times X^{m_0}$ に対し、$F_0(a,t) \in B$ である。
  • 任意の $(a,t) \in B^{n_1} \times X^{m_1}$ に対し、$F_1(a,t) \in B$ である。

 

以上を踏まえると、今回のヒドラの再帰的定義は次の定義文と等価です:

 

$2$ 種類の文字()のみからなる文字列 $h$ がヒドラであるということを、()のみからなる文字列のみからなる任意の集合 $B$ に対し $B$ が以下の $3$ 条件を全て満たすならば $h \in B$ が成り立つということと定める:

  • 空文字列は $B$ の要素である。
  • $B$ の任意の要素 $h_0$ と $h_1$ に対し、$h_0$ と $h_1$ をこの順に結合した文字列は $B$ の要素である。
  • $B$ の任意の要素 $h$ に対し、(と $h$ と) をこの順に結合した文字列は $B$ の要素である。

 

元の言い回しと比べてだいぶ複雑な言い回しとなりましたね。このような複雑な言い回しを避けるために、数学では今回紹介した簡潔な言い回しが定義され採用されているわけです。

例えば後で参考文献として挙げる

  • [1] における$1$ 項関係「be an $\mathcal{L}$-term」や「be an $\mathcal{L}$-formula」の再帰的定義など
  • [2] における集合 $T$ および $1$ 項関係「be a principal term」の再帰的定義など
  • [3] における集合 $B(\alpha,\beta)$ や $\textrm{K}_{\kappa}(\gamma)$ の再帰的定義など

で実際にそういった言い回しが採用されています。

 

参考文献

  1. W. Pohlers, "Proof Theory - The first step into impredicativity", Springer, 2010.
  2. W. Buchholz, "A New System of Proof-Theoretic Ordinal Functions", Annals of Pure and Applied Logic 32 (1986), pp. 195--207.
  3. M. Rathjen, "Ordinal Notations Based on a Weakly Mahlo Cardinal", Archive for Mathematical Logic 29 (1990), pp. 249--263.

 

 

空文字であるヒドラを死んだヒドラと呼び、空文字列でないヒドラを生きたヒドラと呼びます。

 

生きたヒドラ $h$ と正整数 $n$ に対し、ヒドラ $h[n]$ を以下のように再帰的に定義します:

  • あるヒドラ $h'$ が存在して $h$ が $h'$ と()をこの順に結合して得られる文字列であるならば、$h[n]$ は $h'$ である。
  • あるヒドラ $h_0$ と生きたヒドラ $h_1$ が存在して $h$ が $h_0$ と(と $h_1$ と)をこの順に結合して得られる文字列であるとする。
    • あるヒドラ $h_1'$ が 存在して $h_1$ が $h_1'$ と()をこの順に結合して得られる文字列であるとする。
      • $n = 1$ ならば、$h[n]$ は $h_0$ と(と $h_1'$ と)をこの順に結合して得られる文字列である。
      • $n > 1$ ならば、$h[n]$ は $h[n-1]$ と(と $h_1'$ と)をこの順に結合して得られる文字列である。
    • そうでないならば、$h[n]$ は $h_0$ と(と $h_1[n]$ と)をこの順に結合して得られる文字列である。
計算例(クリックで開く):

 

例えば $h$ が(((())()()))である時、$n = 1,2,3,4,5,6,7,8,9,10$ に対する $h[n]$ は次のように表されます:

$h[1] =$ (((())()))
$h[2] =$ (((())())((())()))
$h[3] =$ (((())())((())())((())()))
$h[4] =$ (((())())((())())((())())((())()))
$h[5] =$ (((())())((())())((())())((())())((())()))
$h[6] =$ (((())())((())())((())())((())())((())())((())()))
$h[7] =$ (((())())((())())((())())((())())((())())((())())((())()))
$h[8] =$ (((())())((())())((())())((())())((())())((())())((())())((())()))
$h[9] =$ (((())())((())())((())())((())())((())())((())())((())())((())())((())()))
$h[10] =$ (((())())((())())((())())((())())((())())((())())((())())((())())((())())((())()))

 

ヒドラ大好きbotはヒドラが大好きなbotです。

ヒドラ大好きbot大好きbotヒドラ大好きbotが大好きなbotです。もちろん2体は別物です。

生きたヒドラ $h_0$ に対して、ヒドラ大好きbotヒドラ大好きbot大好きbotの2体をプレイヤーとする初期値 $h_0$ のヒドラゲームを次のように定めます:

  1. まずヒドラを表す変数 $h$ の値を $h_0$ と定める。
  2. 次に2体のプレイヤーはヒドラ大好きbotから始めて $h$ の値が死んだヒドラとなるまで交互に次の操作を行う:
    • 正整数 $n$ を $1$ つ選び、$h$ の値を $h[n]$ の値に置き換える。

このゲームが有限回の操作で終わる時、最後に操作を行ったプレイヤーの勝利となります。

 

入力に生きたヒドラ $H$ が与えられます。

初期値 $H$ のヒドラゲームにおいて2体が自分の勝利を目指し相手の勝利を避けるように最善の手順を選んだ時、有限回の操作で勝敗がつくか否かと、勝敗がつく場合にどちらかが勝利するかを求めてください。

背景

今回導入したヒドラゲームは、プレイヤーが1人であるカービィ・パリスのヒドラゲーム[1]というゲームを少し変更してプレイヤーが2体であるゲームにしたものです。

具体的な変更点は、

  • 今回はカッコのみからなる文字列で定式化しているが、オリジナルでは根付き有限木で定式化していること。
  • 今回は各操作で $n$ を自由に選べるが、オリジナルでは $n$ が選べずターン数が用いられること。
  • 今回はヒドラの変化する箇所が選べないが、オリジナルでは好きな葉を選んでそこを変化させられること。

の $3$ 点です。なお $1$ 点目は操作の厳密な説明と入力を簡単にするための便宜的な変更であり、カッコの構文木を取って根を追加することで根付き有限木に翻訳できます。

入力

入力は次の形式で標準入力から与えられます:

$H$

ヒドラ $H$ が $1$ 行に与えられます。

制約

入力は以下の制約を満たします:

  • $H$ は文字列としての長さが $10^5$ 以下の生きたヒドラ
  • $H$ は( $5 \times 10^4$ 個と) $5 \times 10^4$ 個をこの順に結合して得られる生きたヒドラを初期値とするヒドラゲームにおいて $h$ の値として現れうる

出力

初期値 $H$ のヒドラゲームにおいて2体が自分の勝利を目指し相手の勝利を避けるように最善の手順を選んだ時、

  • 有限回の操作で勝敗がつかないならば-1
  • 先攻であるヒドラ大好きbotが勝利するならば0
  • 後攻であるヒドラ大好きbot大好きbotが勝利するならば1

と出力してください。

最後に改行してください。

サンプル

サンプル1
入力
()
出力
0

まず $h$ の値が()で初期化されます。

次にヒドラ大好きbotが $n = 1$ と選ぶと $h$ の値は $h[1]$ の値に置き換わりますが、これは死んだヒドラです。

以上より、ヒドラ大好きbotの必勝となります。

サンプル2
入力
()()
出力
1

まず $h$ の値が()()で初期化されます。

次にヒドラ大好きbotが正整数 $n$ を選び $h$ の値は $h[n]$ の値に置き換わりますが、これは $n$ の選び方によらず生きたヒドラ()となります。

更にヒドラ大好きbot大好きbotが $n=1$ と選ぶと $h$ の値は $h[1]$ の値に置き換わりますが、これは死んだヒドラです。

以上より、ヒドラ大好きbot大好きbotの必勝となります。

サンプル3
入力
(())
出力
0

まず $h$ の値が(())で初期化されます。

次にヒドラ大好きbotが $n = 2$ と選ぶと $h$ の値は $h[2]$ の値に置き換わりますが、これは生きたヒドラ()()です。

更にヒドラ大好きbot大好きbotが正整数 $n$ を選ぶと $h$ の値は $h[n]$ の値に置き換わりますが、これは $n$ の選び方によらず生きたヒドラ()です。

そしてヒドラ大好きbotが $n = 1$ と選ぶと $h$ の値は $h[1]$ の値に置き換わりますが、これは死んだヒドラです。

以上より、ヒドラ大好きbotの必勝となります。

出典

  1. L. Kirby and J. Paris, "Accessible Independence Results for Peano Arithmetic", Bull. London Math. Soc. 14 (1982), pp. 285--193.

 

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。