回答:
あなたの質問にはいくつかの可能な層があります。
第二弾を少し拡大したい。どのようにして異なる定義が生まれますか?
異なるメモリモデルで有限制御を行う場合、結果として得られるオートマトンのクラスは非常に異なる機能を持っています。実際、これはオートマトン理論が関係する大きな部分です。定義をいじってみると面白いコンセプトにつながることがわかったら、それは研究者にとって自然なことです。-可能なモデルの空間を試してみる。
人々が持っているアイデアのほんのいくつかの例を挙げれば:
などなど。
他の要素を変更することもできます:
面白いことが起こります!
それが数学的な定義の美点です。通常、何かが得られます。その後、何ヶ月も費やして、それが何であるかを見つけることができます。面白いかもしれないし、そうでないかもしれません。たぶん、それは役に立つかもしれません(講演後の恐ろしい質問です!)、多分役に立たないでしょう。しかし、それは常にです。
OmGとRaphaelはすでにあなたの質問に答えました:
この時点であなたは尋ねるかもしれません:なぜ私の教授はプッシュダウンオートマトンを提示し、他の種類のオートマトンを提示しないのですか?スタックを持つプッシュダウンオートマトンが他のデータ構造を持つオートマトンよりも興味深いのはなぜですか?
答えは、非決定論的なプッシュダウンオートマトンは、文脈自由言語、つまり1950年代にコンピュータサイエンスの歴史の初期に導入された文脈自由文法によって生成された言語を、構文を記述する手法として正確に認識できるということです。言語:英語やロシア語などの自然言語と、プログラミング言語などのコンピューター言語(彼らが説明した最初のプログラミング言語はFORTRANでした)。
当時、これは大きな問題でした。サイバネティックスと行動主義はすべて流行でした。コンピュータは商業的に応用され始めていた。それらが適用された領域の1つは言語処理でした。言語をどのように説明できますか?
まあ、それは一連のアイテム(単語または音)で構成される発話(人々が言うまたは書き留めるもの)で構成されます。何かを言いたい人は、それらの発話を発します。別の人がそれらを受け取り、それらから意味をなす。コンピュータに同じことをさせたい場合はどうでしょうか?コンピュータに教えることができる言語を記述する方法を見つける必要があります。コンピュータが使用できる有効な発話を生成する方法、およびコンピュータが使用できるそれらの発話を認識する方法が必要です。つまり、発話は実際には英語やロシア語などの人間が使用する言語の発話です。
そのようなことを行うことができるデバイスの説明はすでに存在しました:ステートマシンとさまざまな種類のオートマトンがありました。しかし、機械翻訳プロジェクトに携わるMITの数学言語学者であるNoam Chomskyは、言語の再帰現象を記述できないため、ステートマシンは英語などの自然言語を記述するのに十分強力ではないことに気付きました。彼は似たようなものを必要としましたが、再帰を説明する力があり、文脈自由文法にたどり着きました。彼は、これらが実際に状態機械よりも多くの言語を記述することができるが、他のいくつかの手法よりは少ないことを証明しました- チョムスキー階層として知られる結果。彼は彼らが英語やロシア語などの言語を記述することを望んだ。
文脈自由文法は発話を生成します。チョムスキーは、人が話すときに文章を生成する方法を基本的に説明していると考えました。発話がどのように認識されるかを説明するデバイスも必要です。それがプッシュダウンオートマトンの目的です。彼らは、文脈自由文法によって生成された発話を正確に認識することができます。したがって、彼らは基本的に、人間が聞いているときに文章を認識する方法を説明すると考えられていました。
その後すぐに、文脈自由言語は実際には言語の構文を完全に記述することができないことが発見されました-あなたはそれを適切に行うためにあらゆる種類の追加の機構が必要です。これは、自然言語と人工言語の両方に当てはまります。(正直に言うと、チョムスキーは目に見えるプッシュダウン言語を考え出すことを意図していたと思いますが、違いを理解していなかったので、もしそうなら、私たち全員に多大な労力を節約できただろう。)
ただし、文脈自由言語とプッシュダウンオートマトンは数学的に非常にシンプルでエレガントなデバイスであり、チョムスキー階層はシンプルでエレガントな結果であるため、コンピューターベースの言語の記述と認識の基礎を説明する教育に非常に役立ちます(正式な言語理論)。このため、これらは理論的なコンピュータサイエンスカリキュラムの標準的な部分であり続けており、実際に使用されている多くの技法はそれらに基づいているため、自然言語処理、プログラミング言語に関連するものを学びたい場合、これらは本当に必要な知識です。実装、およびその他の言語関連のトピック。