形式言語

出典: Wikipedio


形式言語(けいしきげんご)とは、もっとも広義かつ素朴には、素となる記号(これを素記号と仮に呼ぶ)幾つかから、定められた規則(この規則を文法や構文規則や統辞規則などと呼ぶ)に従って作られる記号の全体の集合のことをいう。 ただし、ここで言う記号も、もっとも広義に「何らかの集合の」を意味する。

目次

具体例

一番簡単な形式言語は、素記号が唯一つあって(それを1で表す)、「記号 a の右側に 1 を書き添えることができる」という構文規則だけのあるものである。 この形式言語は、任意長さの 1 の列 11...1 の全体であって、これは自然数の全体にいわゆる後者関数を与えて代数系としたものと同一視される(ペアノの公理参照)。

またたとえば、命題論理学における形式言語(これを命題言語という)においては、素記号(これを変数という)が任意個あって、構文規則には次の二種だけがある。

  1. 記号 a, b から記号 ab, ab, ab を作ることができる。
  2. 記号 a から記号 ¬a を作ることができる。

変数にこれらの規則を任意回適用して出来る記号の全体が命題言語であり、命題言語の元を論理式と呼ぶ。 従ってたとえば、x, y が変数なら (x∧(xy))⇒y は論理式の一つである。

各種プログラミング言語も、素記号と構文規則によって定められた形式言語である。

数学的定義

数学の立場から形式言語を定義すれば、普遍類別代数系普遍性を持つ類別代数系、universal sorted algebra, sorted algebra with universality)となる。 そのうち、類が唯一つのものに限定して説明すれば、次のようになる。すなわち、 (類が唯一つの)形式言語とは、集合 A とその上の全域的算法族 R および A の部分集合 S との組み(A,R,S)で、次の性質をもつもののことをいう。

  1. A の任意の元は S の有限個の元に R に属す算法を有限回施して得られる。
  2. S から A と同類の任意の代数系 B への任意の写像 f は、A から B への準同形写像 F に拡張される。

この2.の性質が普遍性(universality)と呼ばれ、SR とが前述の素記号の全体と構文規則の全体とに相当する。

集合 S と算法族 R を任意に与えたとき、(A,R,S)が形式言語となるような集合 A のあることが証明されている。 たとえば、 R が ∧,∨,⇒ なる三種の2項算法と1項算法 ¬ とからなる場合、(A,R,S)は S を変数の集合とする命題言語に等しい。

ただし、上記のように「類が唯一つ」と限定すると、たとえば述語言語のような簡単な形式言語の理論さえ含むことができないので(述語言語では類が二個ある)、類が任意個ある場合を考えなければならないが、その場合の説明は割愛する(普遍類別代数系参照)。

なお、たとえばという概念が必要に応じて自由に広げられてきたように、形式言語という概念も必要に応じて広げ得るものであり、上記の数学的定義に縛られる必要はない。 実際、分野により必要に応じ、より広い意味に解されている。

如何なる分野に関わるか

形式言語は、「人や計算機の如何なる記号変換能力から如何なる思考能力や計算能力が生まれるか」の学としての広義の数理論理学の研究対象であり、従って形式言語は、哲学言語学計算機科学数学基礎論数理心理学等々において重要な役割を演ずる。 それらの学問分野では、如何なる形式言語を研究すべきかの文法論(構文論・統辞論)や形式言語の意味論演繹論が研究される。

自然言語との関係

自然言語は形式言語と根本的に異なる。 自然言語にも素記号に当たるものがある。 たとえば、音声言語においては音素が素記号に当たり、文字言語においては漢字仮名あるいは単語などが素記号に当たり、手話言語においては単位動作が素記号に当たる。 しかし自然言語の構文規則(あるいは文法)は、文字通り自然発生的のものであり、形式言語における構文規則のように明確ではない。 実際、日本語の文法が如何なるものかという問題については、国語学者・日本語学者の間でも意見の一致がなく、「学者一人につき文法論が一つある」という状態である。 自然言語が数学的に定義される普遍類別代数系でないのは勿論である。

ただ、素朴な文法論は、形式言語の理論とみなすことができる。 素朴な文法論は、例えば次の類のことを主張する。

  • 品詞にはこれこれのものがある。
  • これこれの語はこれこれの品詞に属す。
  • これこれの品詞に属す語をこれこれの活用組み合わせ順序とで並べると文(や)になる。

こういう文法論はすなわち、素記号とは何かを定め、それらから文を作る構文規則を定めるのだから、まさに形式言語の理論である。

しかし、だからといってこういう形式言語論的な文法論が無意味なのではない。 言語そのものではなく、言語行動の深層をなす人間精神を探るためには、むしろこういう文法論を数学化し、更に意味論・文法論を伴った論理学にまで推し進めることが有意義ともいえよう。 数学の定理の証明の深層にある思考の原理を探ることから形式言語の数学的理論たる数理論理学に辿りついたのと同様の事情がある。

情報工学的定義

計算機科学論理学の立場から形式言語を定義すれば、有限個の文字から導かれた有限長の単語群(文字列群)の集合となる。

たとえば、文字セットが <math>\left \{ a , b \right \}</math> ならば、そこから <math>ababba</math> というような文字列が生成される。

この文字セットから導出される典型的な言語として <math>a</math> と <math>b</math> を同数含む全ての単語からなる集合が考えられる。

長さゼロの空単語Empty Word)も許されるものとして、それを <math>e</math>、<math>\epsilon</math>、<math>\Lambda</math>などと表す。文字セットが有限集合で文字列は全て有限長だが、言語としては無限個数の文字列を持つ可能性がある(単語長に制限がないため)。

形式言語の例として以下のものがある。

  • <math>{a, b}</math> から導きだされる全ての単語の集合
  • 集合 <math>\left \{ a^{n}\right\}</math> において n は素数であり、<math>a^{n}</math> は <math>a</math> を <math>n</math> 個並べたものとする。
  • あるプログラミング言語に関して文法的に正しいプログラムの集合。
  • あるチューリングマシンが停止する入力の集合。

形式言語の表現方法も様々である。

いくつかの操作を施すことによって既存の言語から新たな言語を生成することができる。<math>L_{1}</math> と <math>L_{2}</math> がある共通の文字群から構成される言語であるとする。

  • 「連結」<math>L_{1} L_{2}\quad</math> は、文字列群 <math>vw</math> から構成される。ここで、<math>v</math> は <math>L_{1}</math> に含まれる文字列で、<math>w</math> は <math>L_{2}</math> に含まれる文字列である。
  • 「積集合」<math>L_1 \cap L_2</math> は、<math>L_{1}</math> にも <math>L_{2}</math> にも含まれる文字列の集合である。
  • 「和集合」<math>L_1 \cup L_2</math> は、<math>L_{1}</math> か <math>L_{2}</math> に含まれる文字列の集合である。
  • <math>L_{1}</math> の「補集合」は、<math>L_{1}</math> に含まれない全ての文字列の集合である。
  • 「商集合」<math>L_{1}/L_{2}\quad</math> は、<math>L_{1}</math> に含まれる文字列 <math>vw</math> に対して、<math>L_{2}</math> に含まれる文字列 <math>w</math> が存在するときに、全ての <math>v</math> に相当する文字列群から構成される。
  • クリーネスター」<math>L_{1}^{*}</math> は、<math>w_{1}w_{2}...w_{n}</math> という形式の全文字列群から構成される。ただし、<math>w_{i}</math> は <math>L_{1}</math> に含まれ、<math>n \ge 0</math> である。注意すべきは、<math>n = 0</math> の場合もあるので、空文字列 <math>\epsilon</math> も含まれるという点である。
  • 「反転」<math>L_{1}^{R}</math> は、<math>L_{1}</math> の全文字列を反転させた文字列群から構成される。
  • <math>L_{1}</math> と <math>L_{2}</math> の「シャッフル」とは、<math>v_{1}w_{1}v_{2}w_{2}...v_{n}w_{n}</math> で表される全文字列から構成される。ここで、<math>n \ge 1</math> で、<math>v_{1},...,v_{n}</math> を連結した <math>v_{1}...v_{n}</math> は <math>L_{1}</math> に含まれる文字列であり、<math>w_{1},...,w_{n}</math> を連結した <math>w_{1}...w_{n}</math> は <math>L_{2}</math> に含まれる文字列である。

形式言語に関してよくある質問は「ある単語が特定の言語に含まれるかどうかを判断するのは難しいか?」である。これは計算可能性理論計算複雑性理論の領域の問題である。

関連項目

bg:Формален език bs:Formalni jezik ca:Llenguatge formal ckb:زمانی شێوەیی cs:Formální jazyk da:Formelt sprog de:Formale Sprache el:Τυπική γλώσσα en:Formal language es:Lenguaje formal fa:زبان صوری fi:Formaali kieli fr:Langage formel he:שפה פורמלית hi:औपचारिक भाषा hr:Formalni jezik hu:Formális nyelv it:Linguaggio formale (matematica) ko:형식 언어 lt:Formali kalba mk:Формален јазик nl:Formele taal no:Formelt språk pl:Język formalny pt:Linguagem formal ro:Limbaje formale ru:Формальный язык sh:Formalni jezik simple:Formal language sk:Formálny jazyk sr:Формални језик sv:Formella språk tr:Biçimsel dil kuramı uk:Формальна мова zh:形式语言

個人用ツール