Tree automata
Tree automata
今回は(one way) tree automataの話です. ざっくり直感的な説明をするなら、木構造をした入力テープ上を走査(ただし今回はone wayなので逆走したりはしない)して、そこに書かれたアルファベットを入力として読んでいき状態遷移するようなオートマトンなのですが、チ○ンラーメンで出来た*1私の貧相な脳みそでは理解するまでに苦戦を強いられてしまいました。そこで、同じチキ○ラーメンで出来た脳みそを持つ同士が心置きなく○キンラーメンを食べることができるようにちょっとした説明記事を書こうと思います。
話の流れとしてはまず定義を示し、その後意味のない例を用いて動きを確認していきます。
定義
定義 1 :
非負整数の初めのN個を0回以上繰り返して作れる列をN分木とみなす. この時空列は木のルートである. また, 各ノードは後者(successors)としてをもつ.
定義2:
の要素の列ですべてのについてがの後者になっているようなものをパスと呼ぶ.
定義3:
が有限のアルファベットであるとき, 関数を無限分木と呼ぶ.
定義4:
無限分木上の(非決定的)ツリーオートマトンは次の要素からなる4つ組で定義される.
- は状態の集合
- は初期状態
- は次状態関数
- は受理部分集合
定義5:
の実行 はかつ任意のについてとなるような関数
定義6:
が上のの実行かつが無限パスであるとき,
定義7:
すべての無限パスについてとなるような上のの実行が存在するとき、そしてその時に限り, オートマトンは無限分木を受理する.
例:
定義は一通り示したわけですが、困ったことに脳みそがチキン○ーメンで出来ていると定義からその意味をイメージすることが出来ないわけです。ところが幸いなことにオートマトンの話なので動かしてみることが出来ます!というわけで具体的な例を考えていきます。
定義1で言っているのは, 木の各ノードを非負整数の列により表すことができるという事です。例として以下に皆が大好きな2分木の画像を張ります。
左からそれぞれ, のようにして表すことができます. 左右の図中0,1はどちらも各々のの後者です。ここで, 右図中00は0の後者ではない, という事に注意してください。
この木の上でのたどり方をパスと呼びますがパスは定義2のようにして定義されます。たった今右図中の00は0の後者ではないといったのはパスの定義の際に0から直ぐに00へと移動するようなたどり方を許さないようにするためです。
さて、本題のオートマトンの話に移りましょう。例として次のようなオートマトンを考えます。
簡単のためすべての状態を受理状態に含めました。つまりこれで非決定的な遷移の結果可能な遷移先がなくならなければ(実行が無限に続きさえすれば)受理するようになるはずです。また、簡単のため各次状態関数の遷移先の個数を0個か1個にしました。ここで、定義5をもう一度見てみましょう。
定義5:
の実行 はかつ任意のについてとなるような関数
ここがすっきりとわかればもう実行の様子はイメージ出来るようになるはずです(少なくとも私の混乱の原因はここでした)。定義5に基づいて次の図の様な入力を与えた時の具体的な実行を求めてみましょう。
点々で表した以降の部分は直前のノード上のアルファベットと同じものが続くと考えてください。この時,定義5より実行はとなりますね。では、ノード0,1時点での実行はどうなるでしょうか。ノードに対応するアルファベットはです。次状態関数よりとなるので,ノード0,1に対応する実行はそれぞれとなります。同様にして各ノード時点での実行を求めていくと次のようになります。
もう、お分かりですね。無印のオートマトンでは一つの次状態を返していたのが、ツリーオートマトンでは、入力木の分岐の数だけ次状態を返すように拡張されています。それだけです。どうして初め理解に手間取ったのか………。
ただし、話を簡単にするために次状態関数の返す状態の個数を制限していたことは忘れないでください。実際には非決定的な遷移をするので、もちろん状態数はさらに膨れ上がります。とはいえ、今の簡単な例で一度理解してしまえば非決定的な遷移の例もなんとなくイメージ出来るようになったのではないでしょうか。
参考文献
Propositional dynamic logic of looping and converse is elementarily decidable
定義は⇧の論文のものを参照しました。