文法は本質的に再帰的なオブジェクトなので、答えは明らかです。そうは言っても、仕様を正しくするのは難しい場合があります。続編では、いくつかの創造的な前処理が行われていれば、多くの文法的正しさの証明を機械的なステップに減らすことを可能にする手法を説明します。
基本的な考え方は、自分自身を文法と言語の言葉に制限しないことです。このように文法の構造を把握することは困難です。代わりに、文法が作成できる一連の文について議論します。さらに、1つの困難な証明目標を、より扱いやすい多くの小さな目標に分割します。
LET、非端末と形式文法、端子、ルール及び開始シンボル。我々は、によって表すから誘導することができる文の集合所与であり、。によって生成される言語はです。いくつかのに対してを表示したいとします。T δ S ∈ N θ (G )S δ α ∈ θ (G )G=(N,T,δ,S)NTδS∈Nϑ(G)SδG L(G )= θ (G )∩ T * L = L(G )L ⊆ T *α∈ϑ(G)⟺S⇒∗αGL(G)=ϑ(G)∩T∗L=L(G)L⊆T∗
仮説
これについては次のとおりです。を定義して、M1,…,Mk⊆(N∪T)∗
- ϑ(G)=⋃i=1kMiおよび
- T∗∩⋃i=1kMi=L。
2.は通常定義によって明確になりますが、1はいくつかの重大な作業を必要とします。2つの項目を合わせると、必要に応じて明確に示されます。L(G )= LMiL(G)=L
表記を簡単にするために、ます。M=⋃ki=1Mi
岩だらけの道
このような証明を実行するには、2つの主要な手順があります。
これは、取得するのと同じくらい具体的です。詳細は手元の文法と言語に依存します。
例
言語を考える
L={anbncm∣n,m∈N}
文法とによって与えられますδG=({S,A},{a,b,c},δ,S)δ
SA→Sc∣A→aAb∣ε
であることを示したい。この文法が機能する段階は何ですか?さて、最初にを生成し、次にます。これにより、選択、つまり、c m a n b n M iL=L(G)cmanbnMi
M0M1M2={Scm∣m∈N},={anAbncm∣m,n∈N},={anbncm∣m,n∈N}.
と、項目2はすでにの世話をしています。1.に向かって、発表されたように2つの部分に証明を分割します。M 0 ∩ T * = M 1 ∩ T * = ∅M2=LM0∩T∗=M1∩T∗=∅
ϑ(G)⊆M
の規則に沿って構造誘導を実行します。G
IA:以来成功した我々のアンカー。S=Sc0∈M0
IH:という文のセットについて、も知っていると仮定します。X ⊆ MX⊆ϑ(G)X⊆M
IS:う任意。が持つ形式や次に適用されるルールが何であれ、残さないことを示さなければなりません。これは、ケースを完全に区別することで行います。帰納法の仮説により、(正確に)次のいずれかの場合が当てはまることがわかります。α Mα∈X⊆ϑ(G)∩MαM
- 、W = S 、C 、M、M ∈ N Mw∈M0、つまり、一部の場合はです。
2つのルールを適用できます。どちらも文を導き出します。
w=Scmm∈N
M
- Scm⇒Scm+1∈M0、
- Scm⇒Acm=a0Ab0cm∈M1。
- 、W = A N 、B N 、C 、M、M 、N ∈ Nw∈M1、つまり一部の:
w=anAbncmm,n∈N
- w⇒an+1Abn+1cm∈M1を
- w⇒anbncm∈M2ます。
- ワット∈ T *w∈M3:、それ以上の派生は不可能です。w∈T∗
すべてのケースを正常に処理したので、導入は完了しました。
ϑ(G)⊇M
ごとに1つの(単純な)証明を実行します。「後の」が「前の」を使用してアンカーできるように、プルーフを連鎖する方法に注意してください。M i M iMiMiMi
- m S c 0 = S S → S cM1:上誘導を実行し、に固定し、ステップでを使用します。mSc0=SS→Sc
- 、M nはA 、C 、M S ⇒ * S C M ⇒ A C M A → AとBM2:を任意の値に固定し、を超えて誘導します。前の証明でそのを使用して固定します。ステップはを介して進行。mnAcmS⇒∗Scm⇒AcmA→aAb
- 、M 、N ∈ N S ⇒ * N B 、N C 、M ⇒ A N 、B N 、C 、MM3:任意のに対して、の前の証明を使用します。m,n∈NS⇒∗anAbncm⇒anbncm
これで、1の証明の2番目の方向は終わりです。これで完了です。
文法が線形であることを大いに活用していることがわかります。非線形文法の場合、複数の変数パラメーター(証明内)を持つが必要です。文法を制御できる場合、これはシンプルに保つことを教えてくれます。相当するこの文法を抑止する例として考えてください: GMiG
SAC→aAbC∣ε→aAb∣ε→cC∣ε
運動
文法を与える
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
そしてその正しさを証明します。
問題がある場合、文法:
検討制作してG=({S,Br,Bl,A,C},{a,b,c},δ,S)
SBlBrAC→bSb∣Bl∣Br→bBl∣bA→Brb∣Ab→aAaa∣C→bcC∣bcbc
および:Mi
M0M1M2M3M4M5={biSbi∣i∈N}={biBlbo∣o∈N,i≥o}={bkBrbi∣k∈N,i≥k}={bkaiAa2ibo∣k,o,i∈N,k≠o}={bkal(bc)iCa2lbo∣k,o,l,i∈N,k≠o}=L
非線形文法はどうですか?
コンテキストフリー言語のクラスの特徴的な機能はDyck言語です。本質的に、すべてのコンテキストフリー言語は、Dyck言語と通常言語の共通部分として表現できます。残念ながら、Dyck言語は線形ではありません。つまり、このアプローチに本質的に適した文法を与えることはできません。
もちろん、まだを定義して証明を行うことはできますが、入れ子になった帰納法とそうでないものではより困難になります。私が知っている一般的な方法は、ある程度役立つことがあります。少なくともすべての必要な単語を生成し、適切な量の単語(長さごと)を生成することを示すように、仮説を変更します。正式には、Mi
- ϑ(G)⊇Lおよび
- N∈ N|L(G)∩Tn|=|L∩Tn|すべての。n∈N
このようにして、元の仮説から「簡単な」方向に自分自身を制限し、言語の構造を活用して、文法が持つ複雑すぎる機能を無視することができます。もちろん、無料のランチはありませんごとに生成する単語を数えるというまったく新しいタスクを取得します。幸いなことに、これは扱いやすいことがよくあります。詳細についてはこちらとこちらをご覧ください¹。あなたは私の学士論文でいくつかの例を見つけることができます。N ∈ NG n∈N
曖昧で文脈に依存しない文法の場合、私たちは仮説1と思考の上限に戻っているのではないかと心配しています。
- カウントに特定の方法を使用すると、文法が明確であるというボーナスが得られます。また、これは、2を証明することができないため、曖昧な文法ではテクニックが失敗しなければならないことも意味します。