web-dev-qa-db-ja.com

なぜ{a ^ nb ^ n | n> = 0}は定期的ではありませんか?

私が取っているCSコースには、規則的ではない言語の例があります。

{a^nb^n | n >= 0}

メモリコンポーネントがないため、この入力を検証して受け入れる有限状態オートマトン/マシンを作成できないため、これは定期的ではないことを理解できます。 (間違っている場合は訂正してください)

正規言語に関するウィキペディアのエントリ にもこの例がリストされていますが、正規でない理由の(数学的な)証明は提供されていません。

誰かがこれについて私に教えて、これの証拠を提供することができますか、または私にあまりにも良いリソースを指摘することができますか?

15

あなたが探しているのは 正規言語の反復補題 です。

これが あなたの正確な問題です:

例:
L = {ambm | m≥1}。
その場合、Lは通常ではありません。
証明:nをPumpingLemmaのようにします。
w = anbn
w = xyzをPumpingLemmaのようにします。
したがって、xy2z∈L、ただしxy2zにはbよりも多くのaが含まれています。

14
cletus

「a」と「b」のシンボルの同一のシーケンスを「カウント」する有限状態マシンを作成できないためです。一言で言えば、FSMは「カウント」できません。そのようなFSMを想像してみてください:シンボル「a」にいくつの状態を与えますか? 'b'はいくつですか?入力シーケンスにさらに多くの情報がある場合はどうなりますか?

Xが整数値でn <= Xの場合、そのようなFSMを準備できることに注意してください(多くの状態を持つが、それでも有限数のFSMを用意することによって)。そのような言語は規則的です。

6
lorenzog

有限状態オートマトンにはデータ構造(スタック)がありません-プッシュダウンオートマトンの場合のようにメモリ。ええ、それはあなたにいくつかの「a」の後にいくつかの「b」を与えることができますが、正確な量の「a」の後にそのない「b」を与えることができます。

1
Rohit Pratap

その理由は、いいえの場合にのみ最終状態に到達する必要があるためです。 'a'とnoの。 'b'のは入力文字列で等しい。そのためには、両方を数える必要があります。 'a'およびno。 'b'の値ですが、 'n'の値は無限大に達する可能性があるため、有限オートマトンを使用して無限大までカウントすることはできません。

だから{a ^ n b ^ n | n> = 0}は規則的ではありません。

0
Ravi Panchal