オートマトン理論はどれほど実用的ですか?


37

理論的なコンピューターサイエンスに関連するトピックには、常に応用方法があります。しかし、教科書や学部課程では、通常、オートマトン理論が重要なトピックである理由と、実際に応用できるかどうかを説明していません。したがって、学部生はオートマトン理論の重要性を理解するのに苦労し、もはや実用的ではないと考えるかもしれません。

オートマトン理論は実際にはまだ有用ですか?

学部のCSカリキュラムの一部であるべきですか?


4
これはここではトピックとは異なると思います。FAQをご覧ください。
ユッカスオメラ

3
私はこの「オフ=トピック」性について複雑な気持ちを持っています。それは明らかに研究レベルではありませんが、オートマトン理論の関連性に関するこの特定の質問は、頻繁に出てくるものです。
Suresh Venkat

18
これは完全に話題になっていると思います。有限オートマトン理論の応用は何ですか?実世界の頂点カバーアプリケーションと違いはなく、その質問を閉じませんでした。
ピーターショー

4
ところで、この質問は密接に関連しており、その答えは、有限オートマトン理論の研究にもいくつかの実用的な動機付けを与える可能性があります
ユッカスオメラ

2
答えの質と多様性は、「スコープ」の問題を無関係なものにすると言わざるを得ません。すでに3票を投じているので、この質問が限界を超えて動揺しないことを願っています。
Suresh Venkat

回答:


51
  1. grep / awk / sedのようなツールを使用したことがありますか?正規表現は、これらのツールの中心を形成します。

  2. 正規表現を原則的に使用することで、メールサーバーのような「実用的なプロジェクト」でどれだけのコーディングを回避できるかに驚くでしょう。

  3. あなたがCS専攻であれば、間違いなく(少なくとも小さな)言語用のコンパイラー/インタープリターを作成することになります。このタスクを以前に試したことがあり、動けなくなった場合は、少しの理論(別名文脈自由文法)がどれほど役立つかを理解できます。この理論により、かつて不可能だったタスクが、週末に完了することができるものになりました。(そして、発明者にチューリング賞を受賞しました-google BNF)。

  4. あなたがCS専攻であれば、ある時点で、Android APIの次のバージョンがいかにクールであるかだけでなく、コンピューティングの哲学的基盤について考える必要があります。関連する注意点として、あなたの人生の次の5年に備えて準備するのではなく、次の50年に備えて準備するのが大学の仕事です。オートマトン理論のコースの一つとして。


32

CSのより実用的な表現の1つは、コンパイラの構築です。1965年、クヌースはLRパーサーの研究を開始しました。すばやく(10年以内に)、LALRパーサーがありました。これは、シフト/削減パーサーを実装できる決定性プッシュダウンオートマトンのサブセットです。

LALR解析の実行可能性と効率性の中心にあるのは、言語の「プレフィックス」が規則的(有限オートマトン)になるという証明(Knuthによる)です。これは、yacc / bisonなどの自動パーサージェネレーターの起源です。

私たちが知っているプログラミング言語は、これらの開発に対するコンパイル効率の多くを負っていると言っても安全です。

別の例を次に示します。TCP/ IPプロトコルの中心は有限状態マシンです。それはどれほど実用的ですか?

真面目なCS学生、特に実践的な学生はすべて、オートマトン理論に注意を払うべきです。これは、コンピューターサイエンスの豊富さの多くの基礎です。


ソースファイルの解析は、実際にはコンパイラの興味深い(そして重要な)部分ではないので、「これらの開発に対するコンパイル効率の多くを私たちが知っているプログラミング言語」と言っても安全ではないと思います。さらに、さまざまなツールを使用して言語を解析することもできます。たとえば、PEGやコンビネータ(parsec)の解析などです。
1月Špaček16年

30

そのが聞こえますか?それは、オートマトン理論の天国で笑う千の素晴らしい定理、アプリケーション、ツールの音です。

言語とオートマトンは、コンピュータサイエンスのあらゆる分野で見られるエレガントで堅牢な概念です。言語は、先史時代のコンピューティングからの乾いた形式主義的なハンドダウンではありません。言語理論の観点では、洗練された不透明なオブジェクトに関する一見複雑な質問を、単語とツリーに関する単純なステートメントに抽出します。形式言語は、代数とトポロジーが古典数学にもたらす基本的かつゲームを変える視点に似たコンピューターサイエンスの役割を果たします。ここに、言語理論によってアプローチされるいくつかの実用的な、かなり複雑な、実用的な問題があります。

  1. 文書内のフレーズの重複する出現箇所を見つけて、2番目の出現箇所を削除する必要があります。本質的に、言語のシーケンスを置換する必要があります。
  2. プログラムにアサーション違反が含まれていますか?カーネルと対話するときに、デバイスドライバーは特定のプロトコルを尊重しますか?プログラムの動作は一連の実行です。言い換えれば、言語。正しさプロパティは別の言語です。プログラムの正確性の問題は、言語の包含チェックになります。
  3. ソフトウェアが無限ループに陥ることはありますか?分散アルゴリズムにはライブロックが含まれていますか?無限の単語を超える言語が必要ですが、言語の包含ビューは引き続き適用されます。
  4. Webアプリケーションに入力された悪意のあるJavascriptを検出するためのサニタイザーを構築します。悪意のある文字列のセットは言語です。別の言語でフォームに入力された文字列のセット。これらの言語の共通部分が空でないかどうかを判断する必要があります。
  5. リアクティブおよびミッションクリティカルなシステムのランタイム監視。化学プロセスの動作を監視したり、財務データベースの更新を追跡したりするソフトウェアモニターを設計します。これらは心の言語の包含と交差点の問題です。
  6. 多数のアプリケーションによるパターン認識。ゲノムデータ、テキスト、一連のバグレポートでパターンを検出する必要があります。これらは未知の言語からの単語を与えられ、言語を推測しなければならない問題です。これらは言語推論の問題です。
  7. XMLドキュメントのセットが与えられた場合、これらのドキュメントに適用されるスキーマをリバースエンジニアリングする必要があります。XMLドキュメントは、理想化されたツリーにすることができます。スキーマはツリー言語の仕様であり、スキーマ推論問題はツリー言語の言語推論問題です。
  8. 多くのアプリケーションでは、自動算術推論が必要です。プレスバーガー算術などの自然数、加算、およびより小さい述語を持つ論理理論を修正するとします。n個の変数を持つ式は、n次元のベクトルのセットを表します。ベクトルは数字のシーケンスであり、単語としてエンコードできます。述語は一連の単語です。言語。論理積、論理和、否定などの論理演算は、言語の交差、結合、補完になります(実在の数量化は一種の投影です)。

上記で示唆された削減は、言語を抽象的な数学的オブジェクトとして扱います。これらのアイデアを実際に適用するには、これらのデータ構造を操作する言語とアルゴリズムを表すデータ構造が必要です。

オートマトンを入力します。オートマトンを使用すると、言語などの抽象的な数学オブジェクトに関する質問を、ラベル付きグラフに関する具体的でアルゴリズム的な質問に減らすことができます。言語とオートマトン理論は、非常に多くの実用的なアプリケーションに加えて、非常に重要な知的サービスを提供します。均一で整理された概念空間で、郵便番号の書式設定からモナド2次論理の決定手順に至るまでの問題を考えることができます。なんてすごい!

論理と決定手順については何も言っていません。(はい、実用的なアプリケーションがあります。)信頼できる概要については、Kavehの回答を参照してください。


ハハ、皮肉
プラヴィーンソニ

16

他の回答で説明したように、オートマトン理論は、私たちがよく理解している単純な計算モデルとして概念的に重要であり、正規表現とオートマトンには多くの実際のアプリケーションがあります。

これは、オートマトン理論に戻って現代の概念を理解する現代の研究の小さな例です。この論文では、研究者は、通常の言語にはすべてプロパティテスターがあることを証明しています


15

それは単なるバニラオートマトンではありません。何ができるか、さらに重要なことはいくつかのクエリ言語で表現できないものを推論するのに役立つ(計算)モデルの基本(状態、イプシロン遷移など)について学習しています。いくつかの興味深い結果が含まれます:

(そしてもちろん私は他の多くのクラスをスキップしています)

基本的に、これは非常に一般的なモデルです。クラスは、おそらくオートマトン、言語、ロジック間のリンクを強調します。

これを具体的な「世俗的な」ツールに関連付けることを検討している場合、Abiteboul&alによるFoundations of Databasesのいくつかの部分(AB?)を図書館でゆっくり読んで、これをクラスの資料に戻そうとします。もちろん、それはオートマトンクラスのアプリケーションを探すための(多くの)方法の1つに過ぎず、最も明白な方法ではないと思いますが、それがまさに興味深い演習である理由です。


14

さまざまな答えですでに指摘したように、UGコースのオートマタ理論は、より高度な(そして実用的な)トピックを紹介し、見落とされた接続を指摘するための基本的な概念フレームワークを提供します。たとえば、バイナリ決定図(最小化されたDFA。DFAを教えた後、BDDベースのパズルの解法をよく教えます)。BioPerlおよびBioPythonを含むスクリプティング(および実際のスクリプト正規表現で意図しない一致が隠される可能性のある素晴らしい設定)、フォーマルデバッグ(否定されたFA、交差などの状態プロパティ)、さらにはVCRまたはホーム侵入者アラームプログラミング(不完全な例を通して教えられた不十分に指定されたオートマトンの毎日のストレス状況;おそらくHarelのプレイイン/プレイアウトシナリオベースのユーザーインターフェイスの合成を使用して形式化された)。また、この設定を使用してPythonを教える」


1
Ganeshさん、ようこそ!
スレシュヴェンカト

1
オートマトンを教える良い方法。講義ノートを共有してもらえますか?
マーティンバーガー

9

ゲームプログラミングのAI側では、有限状態マシン(またはそれらの少なくともいくつかの単純な一般化/拡張)がよく使用されます。彼らは、キャラクターの行動をカプセル化するための優れたモデルを提供することが判明しました。たとえば、敵は、明確に定義されたトランジションを持つ「パトロール」、「検索」、「アプローチ」、「攻撃」、「防御」、「退却」、「死」などを表す状態を持つことができます。これには、通常の言語などのようなオートマトンの正式な側面は含まれませんが、オートマトンの概念は非常に重要な概念です。


8

理論と実践を対比させ、一方を他方に設定する言語は、無知のまさに完結であり、それは人間が思考の最初の要素に精通していないことを証明し、教訓を与えられないほど倒錯する気がします。

—ジェームズミル(「PQ」と偽名で書く)、「理論と実践」、ロンドンおよびウェストミンスターレビュー、1836年4月


8

業界で使用されているモデル検査のオートマトン理論に関連したかなりの研究がありました。チェックフィールド研究所でモシェ・バーディの最近の講義を、特にオートマトン理論はまだ重要かつ有用である理由の味のための第3回講座「ロジック、オートマトン、ゲーム、およびアルゴリズム」。

抽象:

Buechi、Elgot、Rabin、およびTrakhtenbrotによって1950年代および1960年代に導入された、決定手順に対するオートマトン理論的アプローチは、決定手順に対する最も基本的なアプローチの1つです。最近、このアプローチは、ハードウェアおよびソフトウェアシステムの正式な検証における産業用アプリケーションを発見しました。論理から実用的なアルゴリズムへの道は、オートマトンだけでなく、1970年代後半にChandra、Kozen、Stockmeyerによってアルゴリズムの側面が研究されたゲームも経由します。この概要講演では、オートマトンとゲームを介したロジックからアルゴリズムへのパスについて説明します。

講義のスライドと音声ファイルはこちらから入手できます:123


6

「実用的」および「アプリケーション」という言葉の意味を考慮する必要があります。一部の学生にとって、実用的とは、試験に合格するのに役立つものです。他の人のために、仕事で出てくるもの。どちらの場合も、オートマタ理論は非常に実用的です。

他の人が指摘しているように、例えばコンパイラを勉強するときは、文法を使用します。しかしそれ以上:さまざまな状態とそれらの間の遷移のルールを持っているという概念全体を理解することで、たとえばコードがあちこちで冗長であり、それを改善すると、より良いプログラマになることができますされて適用する同じコードの中で概念的なアイデア DFAの最小化の後ろに。

「アプリケーション」についても同様です。その言葉であなたは何を理解していますか?「地に足のついたエンジニア」であっても、プログラミングのコード、フロー図、さらにはスタックのシンプルでありながら素晴らしいコンセプトなど、現実世界のプロジェクトでオートマタ理論のアイデアに似たアイデアを目にし、使用します。私のような理論オタクについては、論理、代数、有限モデル理論など、他の分野でのオートマタ理論の適用を検討します。おそらく、スーパーマーケットで買い物をしているときにポンピングレンマを使用する必要はおそらくないでしょうが、そのような定理は、特定のクラスの言語の構造を理解するのに役立ちました。それらが対応している論理や代数構造は言うまでもありません そして、それは実用性の尺度よりも大切なものです。


5

ロジックと一緒にスローされるオートマトンは、次のような政治家をチェックする方法を提供できます。

Aφ

AφAφ

φAφAφL(A)L(Aφ)


3

さまざまなコンテキストで有限状態マシンとして記述されるか、確率的バリアントである隠れマルコフモデルを使用して記述されることが多い有限オートマトンは、パターン認識およびパターン構造の定量化に適用できます。例えば、与えられた確率分布に応じて文字列を生成したり、何らかの分布から文字列のサンプル(または時系列)の統計的特性を一致させたりする最小の確率的有限オートマトンです。

たとえば、隠された状態を盲目的に再構築するためのアルゴリズムであるCSSRを参照してください。隠れマルコフモデルよりも効率的で柔軟です。


1
実用面に追加するために、隠れマルコフモデルは、Kurzweilなどの音声認識プログラムで使用されます。
tdyen

3

オートマトン理論のより実用的なもう1つの用途は、人工知能の開発です。人工知能は、有限オートマトンの概念から開発されました。ロボットのニューラルネットワークは、オートマトン理論に基づいて構築されます。すべてのロボットもオートマトンです。


2

産業にどのように関係するかという点に関しては、素晴らしい答えを出した人もいます。重要なのはその科学的価値であり、Automata理論は、多くの場合、学部生の研究における計算理論の上位層を最初に理解するための入り口です。オートマトン理論には、理論的コンピューターサイエンスのあらゆるところに、特にコンパイラーなどのアプリケーションについて話したい場合に現れる大規模な定理があります。その科学的価値(時代遅れではありません。どのようになり得るのでしょうか?それはこの分野の核となる理論です)。計算に興味のある科学者にとって実用的です。計算の性質を理解している、または理解したい人に役立つ知識であるため、実用的です。あなたがそれで使用を見つけることができない場合、私はそれがプログラミングではないので、それを研究するか、CSを研究する意図さえ疑問に思います(それは '

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.