アルファベット 上の言語 を次のように定める。 は文字列 の長さを表す。
を受理する DFA を、次の手順で作る。
- :それまでに読んだ文字列 について、 を で割った余り()を状態として記憶する DFA。
- :それまでに読んだ文字列 の末尾が の先頭部分とどこまで一致しているか、を状態として記憶する DFA。状態は、 の末尾と一致する の先頭部分のうち最も長いものが「空文字列」「」「」の 通りに対応する。
- : と の積構成で作った DFA。状態は の状態と の状態の組で、 のすべての状態と のすべての状態の組をすべて状態とする。各文字を読むと、組の両方の成分をそれぞれの DFA の遷移に従って同時に動かす。初期状態は両方の初期状態の組、受理状態は両方の成分が受理状態である組とする。
このとき、DFA の状態の個数を求めよ。