| シリーズの一部 |
| 形式言語 |
|---|

論理学、数学、コンピュータサイエンス、言語学において、形式言語とは、「アルファベット」と呼ばれる集合から記号が取られた文字列の集合です。
形式言語のアルファベットは、文字列(「単語」とも呼ばれる)に連結される記号で構成されています。 [ 1 ]特定の形式言語に属する単語は、整形式の単語と呼ばれることもあります。形式言語は、正規文法や文脈自由文法などの形式文法によって定義されることがよくあります。
コンピュータサイエンスにおいて、形式言語は、とりわけ、プログラミング言語の文法や自然言語のサブセットの形式化されたバージョンを定義するための基礎として用いられ、そこでは言語の単語が意味またはセマンティクスに関連付けられた概念を表現する。計算複雑性理論では、決定問題は典型的には形式言語として定義され、複雑性クラスは限られた計算能力を持つ機械によって解析できる形式言語の集合として定義される。論理学および数学の基礎においては、形式言語は公理系の構文を表現するために用いられ、数学的形式主義とは、すべての数学はこのように形式言語の構文的操作に還元できるという哲学である。
形式言語理論の分野は、主にそのような言語の純粋に統語的な側面、すなわち内部構造パターンを研究する。形式言語理論は、自然言語の統語的規則性を理解するための方法として、言語学から生まれた。[ 2 ]
このセクションは拡張が必要です。不足している情報を追加していただければ幸いです。 (2021年3月) |
17世紀、ゴットフリート・ライプニッツは、象形文字を用いた普遍的かつ形式的な言語である「キャラクタリスティック・ユニバーサリス」を構想し、記述しました。その後、カール・フリードリヒ・ガウスはガウス符号の問題を研究しました。[ 3 ]
ゴットロープ・フレーゲは、ライプニッツの思想を、1879年の『記号論』(Begriffsschrift)で初めて概説され、 1893/1903年に2巻からなる『算術基本法』(Grundgesetze der Arithmetik)でより詳細に展開された記法体系を通して実現しようと試みた。[ 4 ]これは「純粋言語の形式言語」を記述した。[ 5 ]
20世紀前半には、形式言語に関連するいくつかの発展がありました。アクセル・トゥーは1906年から1914年にかけて、単語と言語に関する4つの論文を発表しました。これらの論文の最後のものは、エミール・ポストが後に「トゥーシステム」と呼ぶものを導入し、決定不能問題の初期の例を示しました。[ 6 ]ポストは後にこの論文を基礎として、1947年に「半群の単語問題は再帰的に解決不可能である」という証明を行い、[ 7 ]形式言語を作成するための 標準的なシステムを考案しました。
1907年、レオナルド・トーレス・ケベドはウィーンで機械図面(機械装置)の記述のための形式言語を導入した。彼は「機械の記述を容易にするための表記法と記号のシステムについて」(Sobre un sistema de notaciones y símbolos destinados a facilitar la descripción de las máquinas)を出版した。[ 8 ]ハインツ・ゼマネクはこれを工作機械の数値制御用プログラミング言語と同等と評価した。 [ 9 ]
ノーム・チョムスキーは、チョムスキー階層として知られる形式言語と自然言語の抽象表現を考案しました。[ 10 ] 1959年にジョン・バッカスは、FORTRANの作成に続いて、高級プログラミング言語の構文を記述するためにバッカスナウア形式を開発しました。[ 11 ]ピーター・ナウアはALGOL60レポートの秘書/編集者であり、その中でバッカスナウア形式を使用してALGOL60の形式部分を記述しました。
形式言語の文脈において、アルファベットは任意の集合であり、その要素は文字と呼ばれます。アルファベットは無限個の要素を含むことができます。 [注1 ]しかし、形式言語理論におけるほとんどの定義では、有限個の要素を持つアルファベットが指定されており、多くの結果は有限個の要素を持つアルファベットにのみ適用されます。多くの場合、通常の意味でのアルファベット、あるいはより一般的にはASCIIやUnicodeなどの有限の文字エンコーディングを使用することが理にかなっています。
アルファベット上の単語は、任意の有限の文字の並び(つまり、文字列 )にすることができます。アルファベットΣ上のすべての単語の集合は、通常 Σ *(クリーネの星を使用)で表されます。単語の長さは、その単語を構成する文字の数です。どのアルファベットにも、長さ 0 の単語は 1 つだけあります。これは空の単語で、e、ε、λ、さらには Λ で表されることがよくあります。連結により、2 つの単語を組み合わせて新しい単語を作成できます。その長さは、元の単語の長さの合計です。単語と空の単語を連結した結果が、元の単語です。
一部のアプリケーション、特に論理では、アルファベットは語彙とも呼ばれ、単語は式または文とも呼ばれます。これにより、文字/単語のメタファーが壊れ、単語/文のメタファーに置き換えられます。
空でない集合 が与えられたとき、上の形式言語は の部分集合であり、 は上のすべての可能な有限長単語の集合である。この集合を のアルファベットと呼ぶ。一方、上の形式言語が与えられたとき、 のとき単語は整形式である。同様に、 のとき式は整形式である。上の形式言語には、からすべての可能な整形式の単語を作成するための明確な規則と制約の集合が存在する場合がある。
コンピュータサイエンスや数学では、自然言語を扱わないことが多いため、「形式的な」という形容詞は冗長として省略されることが多い。一方、文脈から その言語のアルファベットが明らかな場合は、「形式言語」とだけ言うこともできる。
形式言語理論は通常、何らかの統語規則によって記述される形式言語を扱いますが、「形式言語」という概念の実際の定義は、上記の通り、与えられたアルファベットから構成される有限長の文字列の(おそらく無限の)集合であり、それ以上でもそれ以下でもありません。実際には、正規言語や文脈自由言語など、規則によって記述できる言語は数多く存在します。形式文法の概念は、統語規則によって記述される「言語」という直感的な概念に近いかもしれません。定義を誤用すると、特定の形式言語は、それを記述する形式文法を伴うと考えられることがよくあります。
次の規則は、アルファベット Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, =} 上の 形式言語 Lを記述します。
これらの規則によれば、文字列「23+4=555」は Lに含まれますが、「=234=+」は含まれません。この形式言語は自然数、整形式の加算、そして整形式の加算等式を表現しますが、それらの見た目(構文)のみを表現し、それらの意味(意味論)は表現しません。例えば、これらの規則のどこにも、「0」が数値ゼロを意味すること、「+」が加算を意味すること、「23+4=555」が偽であることなどは示されていません。
有限言語の場合、整形式の単語を全て明示的に列挙することができます。例えば、言語 LはL = {a, b, ab, cba}と記述できます。この構成の退化したケースは空言語であり、これは単語を全く含みません(L = ∅)。
しかし、Σ = {a, b} のような有限(空でない)アルファベット上でも、表現可能な有限長の単語は無限に存在します。例えば、「a」、「abb」、「ababba」、「aaababbbbaab」などです。したがって、形式言語は一般的に無限であり、無限形式言語を記述することはL = {a, b, ab, cba} と書くほど単純ではありません。形式言語の例をいくつか挙げます。
形式言語は様々な分野でツールとして用いられます。しかし、形式言語理論は特定の言語(例として扱う場合を除く)に焦点をあてることはほとんどなく、主に言語を記述するための様々な形式主義の研究に焦点をあてています。例えば、ある言語は次のように表すことができます。
このような形式主義に関してよく尋ねられる質問には次のようなものがあります。
驚くべきことに、これらの決定問題に対する答えは「全くできない」、あるいは「非常に高価だ」(どの程度高価であるかという特徴付けとともに)というものです。したがって、形式言語理論は計算可能性理論と複雑性理論の主要な応用分野です。形式言語は、生成文法の表現力と認識オートマトン(認識オートマトン)の複雑さに基づいて、チョムスキー階層に分類できます。文脈自由文法と正規文法は、表現力と構文解析の容易さのバランスが取れており、実用的なアプリケーションで広く使用されています。
言語における特定の演算は一般的です。これには、和集合、積集合、補集合といった標準的な集合演算が含まれます。また、文字列演算の要素単位の適用も、演算の一種です。
例:と が共通のアルファベットに基づく言語であるとします。
このような文字列演算は、言語のクラスの閉包性を調査するために使用されます。言語のクラスが特定の演算に関して閉じているとは、その演算をそのクラスの言語に適用すると、常に同じクラスの言語が再び生成されることを意味します。例えば、文脈自由言語は、正規言語との和集合、連接、積集合に関して閉じていることが知られていますが、積集合や補集合に関しては閉じていないことが知られています。三言語族理論と抽象言語族理論は、言語族の最も一般的な閉包性をそれ自体で研究します。[ 12 ]
| 手術 | 通常 | DCFL | CFL | インド | CSL | 再帰的 | 再エネ | |
|---|---|---|---|---|---|---|---|---|
| 連合 | はい | いいえ | はい | はい | はい | はい | はい | |
| 交差点 | はい | いいえ | いいえ | いいえ | はい | はい | はい | |
| 補体 | はい | はい | いいえ | いいえ | はい | はい | いいえ | |
| 連結 | はい | いいえ | はい | はい | はい | はい | はい | |
| クリーネスター | はい | いいえ | はい | はい | はい | はい | はい | |
| (文字列)準同型 | はい | いいえ | はい | はい | いいえ | いいえ | はい | |
| εフリー(弦)準同型 | はい | いいえ | はい | はい | はい | はい | はい | |
| 代替 | はい | いいえ | はい | はい | はい | いいえ | はい | |
| 逆準同型 | はい | はい | はい | はい | はい | はい | はい | |
| 逆行する | はい | いいえ | はい | はい | はい | はい | はい | |
| 正規言語との交差 | はい | はい | はい | はい | はい | はい | はい |
コンパイラは通常、2つの異なるコンポーネントから構成されます。字句解析器は、などのツールによって生成されることもありlex、プログラミング言語文法のトークン(識別子やキーワード、数値リテラルや文字列リテラル、句読点、演算子記号など)を識別します。これらのトークン自体は、より単純な形式言語(通常は正規表現)によって指定されます。最も基本的な概念レベルでは、パーサー(パーサージェネレーターなどによって生成されることもありyacc)は、ソースプログラムが構文的に有効かどうか、つまりコンパイラが構築されたプログラミング言語文法に基づいて適切に構成されているかどうかを判断しようとします。
もちろん、コンパイラはソースコードを解析するだけではありません。通常は、それを何らかの実行形式に変換します。そのため、パーサーは通常、yes/noの回答以上のもの、典型的には抽象構文木を出力します。これはコンパイラの後続の段階で使用され、最終的にハードウェア上で直接実行されるマシンコード、または仮想マシンでの実行を必要とする中間コードを含む実行ファイルを生成します。

数理論理学では、形式理論とは形式言語で表現された 文の集合です。
形式体系(論理計算または論理システムとも呼ばれる)は、形式言語と演繹装置(演繹システムとも呼ばれる)から構成されます。演繹装置は、有効な推論規則として解釈できる一連の変換規則、または一連の公理、あるいはその両方で構成されます。形式体系は、1 つ以上の他の式から 1 つの式を導き出すために使用されます。形式言語はその式で識別できますが、形式体系は同様にその定理で識別することはできません。2 つの形式体系とがすべて同じ定理を持ちながらも、重要な証明理論的方法で異なる場合があります(たとえば、式 A は、一方においては式 B の構文上の帰結であるが、もう一方ではそうではないなど)。
形式的な証明または導出とは、整形式の式(文または命題として解釈できる)の有限列であり、各式は公理であるか、または列内の先行する式から推論規則によって導かれる。列の最後の文は、形式体系の定理である。形式的な証明は、その定理が真の命題として解釈できるため有用である。
形式言語は本質的に完全に統語論的ですが、言語の要素に意味を与える意味論を付与することができます。例えば、数理論理学では、特定の論理における可能な式の集合が形式言語であり、解釈によって各式に意味(通常は真理値)が割り当てられます。
形式言語の解釈の研究は形式意味論と呼ばれます。数理論理学では、これはしばしばモデル理論の観点から行われます。モデル理論では、式に現れる項は数学的構造内のオブジェクトとして解釈され、一定の構成的解釈規則によって、項の解釈から式の真理値がどのように導かれるかが決定されます。式のモデルとは、式が真となるような項の解釈です。
は有限集合である