タグ付けされた質問 「formal-languages」

形式言語、文法、オートマトン理論に関する質問

3
ハミング距離が2以上の等しい長さの単語のペアの言語はコンテキストフリーですか?
次の言語コンテキストは無料ですか? L={uxvy∣u,v,x,y∈{0,1}+,|u|=|v|,u≠v,|x|=|y|,x≠y}L={uxvy∣u,v,x,y∈{0,1}+,|u|=|v|,u≠v,|x|=|y|,x≠y}L = \{ uxvy \mid u,v,x,y \in \{ 0,1 \}^+, |u| = |v|, u \neq v, |x| = |y|, x \neq y\} sdcvvcで指摘されているように、この言語の単語は、ハミング距離が2以上の同じ長さの2つの単語の連結として説明することもできます。 私はそれが文脈自由ではないと思いますが、私はそれを証明するのに苦労しています。この言語を通常の言語(たとえば、など)と交差させてから 、ポンピング補題および\または準同型を使用しようとしましたが、特徴付けて記述するには複雑すぎる言語が常に得られますダウン。 0∗1∗0∗1∗ 0∗1∗0∗1∗ \ 0^*1^*0^*1^*

6
プログラミング言語、正規表現、形式言語の関係は何ですか
この質問に対する答えをネットで探しましたが、私以外の誰もが暗黙のうちに答えを知っているようです。おそらくこれは、関心のある唯一の人がその主題について高等教育を受けた人だからです。一方、私は高校での宿題の最後に投げ込まれました。 私の質問は、プログラミング言語はどのくらい正確に正式言語に関連していますか?私が読むところはどこでも、「プログラミング言語の文法を定義するために形式言語が使用されている」という言葉があります。 今、私が集めたものから、正式な言語とは、特定の記号セット(言語のアルファベット)に適用される一連の生産規則です。これらの生産ルールは、次のような一連の変換を定義します。 b -> a aaa->c これは次のように適用できます。 abab->aaaa aaaa-> ca 補足として、正式な言語のアルファベットを{a、b、c}と定義すると、aとbは非終端であり、cは変換できないため終端です(間違っている場合は修正してください)それ)。 それを考えると、これはプログラミング言語にどのように当てはまるのでしょうか?また、正規表現を使用してテキスト形式の言語を解析し、文法が正しいことを確認することもよくあります。意味あり。その後、正規表現は正式な言語によって定義されると述べられています。正規表現は、正規表現を表す有限状態オートマトンがゴールポイントに到達したかどうかに応じて、(少なくとも私の経験では)trueまたはfalseを返します。私が見る限り、それは変換とは関係ありません*。 プログラム自体のコンパイルについては、正式な言語がコードを連続的に低レベルのコードに変換し、最終的にハードウェアが理解できる複雑なルールセットを介してアセンブリに到達できると思います。 だからそれは私の混乱した観点からのものです。おそらく、私が言ったことには根本的に間違っていることがたくさんあります。だから私は助けを求めています。 * (a|b)*b*c->trueプロダクションルールのようなものを検討しない限り、その場合、ルールには有限状態オートマトン(つまり、正規表現)が必要です。先ほど言ったように、これは意味がありません

1
「密な」正規表現は
正規表現の推測は次のとおりです。 正規表現RRR場合、長さ|R||R||R|括弧と演算子を無視して、その中のシンボルの数になります。例えば|0∪1|=|(0∪1)∗|=2|0∪1|=|(0∪1)∗|=2|0 \cup 1| = |(0 \cup 1)^*| = 2 推測:場合 およびは、長さすべてのストリングが含まれます以下の場合、。L (R )| R | L (R )= Σ ∗|R|>1|R|>1|R| > 1L(R)L(R)L(R)|R||R||R|L(R)=Σ∗L(R)=Σ∗L(R) = \Sigma^* つまり、がRの長さまで「密」である場合、Rは実際にすべてを生成します。L(R)L(R)L(R)RRRRRR 関連する可能性のあるもの: すべての文字列を生成するために必要なのは、ほんの一部です。バイナリで、例えば、R = (0 ∪ 1 )* ∪ Sは任意のために動作します。RRRR=(0∪1)∗∪SR=(0∪1)∗∪SR = (0 \cup 1)^* \cup SSSS ある時点で Kleene星が必要です。存在しない場合は、|より小さいサイズの文字列が欠落します。R | 。RRR|R||R||R| 証拠や反例を見るといいでしょう。見逃したことが明らかに間違っているケースはありますか?誰もこれ(または似たようなもの)を見たことがありますか?

6
素人向けの再帰的および再帰的に列挙可能な言語定義
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的なコンピューターサイエンススタック交換から移行されました。 6年前に移行され ました。 私は、再帰的で再帰的に列挙可能な言語の多くの定義に出会いました。しかし、私はそれらが何であるかを完全に理解できませんでした。 誰かが簡単な言葉で彼らが何であるかを教えてもらえますか?

3
同等のDFAが最大サイズになるためのNFAの条件は何ですか?
DFAは表現力の点でNFAと同等であることがわかっています。NFAをDFAに変換するための既知のアルゴリズムもあります(残念ながら、そのアルゴリズムの発明者を知っています)。最悪の場合、NFAが状態だった場合、状態になります。2S2S2^SSSS 私の質問は、最悪のシナリオを決定するものは何ですか? あいまいな場合のアルゴリズムの転写を次に示します。 レッツ NFAなります。DFAしますA=(Q,Σ,δ,q0,F)A=(Q,Σ,δ,q0,F)A = (Q,\Sigma,\delta,q_0,F)A′=(Q′,Σ,δ′,q′0,F′)A′=(Q′,Σ,δ′,q0′,F′)A' = (Q',\Sigma,\delta',q'_0,F') Q′=P(Q)Q′=P(Q)Q' = \mathcal{P}(Q)、 F′={S∈Q′|F∩S≠∅}F′={S∈Q′|F∩S≠∅}F' = \{S \in Q' | F \cap S \neq \emptyset \}、 、及びδ′(S,a)=⋃s∈S(δ(s,a)∪δ^(s,ε))δ′(S,a)=⋃s∈S(δ(s,a)∪δ^(s,ε))\delta'(S,a) =\bigcup_{s \in S} (\delta(s,a) \cup \hat \delta(s,\varepsilon)) 、q′0={q0}∪δ^(q0,ε)q0′={q0}∪δ^(q0,ε)q'_0 = \{q_0\} \cup \hat \delta(q_0, \varepsilon) ここで、は拡張遷移関数です。δ^δ^\hat\deltaAAA

4
構成主義の論理には決定不能な言語が存在しますか?
構成主義論理は、排除された中間の法則と二重否定を公理として取り除くシステムです。ウィキペディアのこちらとこちらで説明されています。特に、システムは矛盾による証明を許可していません。 私は、これがチューリングマシンと形式言語に関する結果にどのように影響するかをよく知っている人はいますか?言語が決定不能であることのほとんどすべての証明は、矛盾による証明に依存していることに気づきます。対角化引数と縮約の概念の両方がこのように機能します。決定不可能な言語の存在の「建設的な」証拠はありえますか?もしそうなら、それはどのように見えるでしょうか? 編集:明確にするために、構成主義の論理における矛盾による証明の私の理解は間違っていました、そして答えはこれを明確にしました。

1
EPALを認識する非一般的なCFG解析アルゴリズムはありますか?
EPALはパリンドロームの言語でもあり、次の明確なコンテキストフリーの文法によって生成される言語として定義されています。 S→aaS→aaS \rightarrow a a S→bbS→bbS \rightarrow b b S→aSaS→aSaS \rightarrow a S a S→bSbS→bSbS \rightarrow b S b EPALは、多くの解析アルゴリズムの「悩みの種」です。言語を記述する文法を解析できる明確なCFGの解析アルゴリズムにはまだ出会っていません。特定のパーサーでは解析できない明確なCFGがあることを示すためによく使用されます。これは私の質問に影響を与えました: EPALで動作する明確なCFGのみを受け入れる解析アルゴリズムはありますか? もちろん、言語を線形時間で解析するグラマー用のアドホック2パスパーサーを設計できます。EPALを念頭に置いて特別に設計されていない解析メソッドに興味があります。

2
Perl互換の正規表現はどの言語を認識しますか?
タイトルが示すように、私は先週末、Perl互換の正規表現に一致する言語のクラスについて思いを巡らせて、パターン内の任意のコードを実行できるマッチング演算子を除外しようとして数時間を費やしました。 あなたはPCREsが何であるかわからない場合は、お読みください。このとこれを。 問題は、インターネットで利用可能なリソースがコンテキストフリー言語でほとんど停止し、PCREがそれらよりも多く一致する可能性があることです(以下を参照)。しかし、この種のことに関する定理や論文をどこで見つけることができるのか、本当にわかりません。 特に、PCREは明らかに通常の言語のスーパーセットです(PCRE構文にはすべての通常の言語演算子があるため)。 任意のCFGをGreibachの標準形式にすることができます。これにより、左再帰が削除されます。私はこれを(?(DEFINE)...)グループによって使用して、文法を一致するサブルーチンに「翻訳」し、翻訳することによって左再帰でのチョークを回避することができると思います: 各制作の先頭にある非終端記号はサブルーチンになります (?<HEAD>...) 各プロダクションの本体はサブルーチンに入れられます。端末はそのまま残され、非端末はプロシージャ呼び出し(つまり(?&NONTERMINAL))になります。 headと同じ非終端記号を持つすべてのプロダクションは、|演算子を使用してORで結合されます((?:...)必要に応じて、との追加のグループ化) パターンは、(?(DEFINE)...)すべての「翻訳された」プロダクションを含むグループになり、文字列全体に一致する開始シンボルのプロシージャの呼び出し、つまり^(?(DEFINE)...)(?&START)$ これは、すべてのCFGに対処する必要があります。したがって、PCREは任意のCFLと一致できる必要があります。 さらにあります:単純な言語 つまり、文字列の言語を二回繰り返し。この言語はCFLではありません-CFLのポンピング補題は失敗します。(ペイ特に注意することを | VのX ワット| ≤ pが 保持しなければならない、ので、あなただけの始まりまたは2つの繰り返し文字列の端をポンプすることはできません。)L={ww|w∈Λ∗}L={ww|w∈Λ∗}L = \{ ww | w \in \Lambda^* \} |vxw|≤p|vxw|≤p |vxw| \leq p ただし、この言語はPCRE:によって簡単に一致します^(.*)\1$。したがって、厳密にCFLを上回っています。 どれくらいですか?さて、私が言ったように、私にはわからない。CSLやその間の他のすべてのクラスに関するリソースを見つけることができませんでした。これについて議論したい専門家はいますか? 補遺: PCRE構文のどのサブセットを許可する必要があるかを正確に指定するように求められました。投稿の冒頭で書いたように、パターン内の任意のコードの実行を許可する演算子(など)を除外したかったの??{}です。 引数のために、pcresyntax(3)のマニュアルページで定義されている構文に固執できると思います。これは、Perl 5.10-5.12が提供するものの合理的なサブセットで、コールアウト(パターン内にないため)を除きます。バックトラッキング制御動詞を追加または削除しても、認識できる言語が変わるかどうかはわかりません。もしそうなら、どのクラスを取得するか、取得しないかを把握しておくとよいでしょう。

1
L = L(G)と表示する方法は?
正式な文法を与えることによって正式な言語を指定することは頻繁に行われます。言語を記述するだけでなく、言語を解析するため、または適切な科学を行うためにも文法が必要です。すべての場合において、手元の文法が正しいこと、つまり希望する単語を正確に生成することが重要です。 正式な証明を省略して、なぜ文法が目的の言語の適切な表現であるのかを高レベルで議論することができます。しかし、何らかの理由で疑問がある場合、または正式な証拠が必要な場合はどうでしょうか?適用できる手法は何ですか? これは参照質問になると思われます。したがって、少なくとも1つの例で説明されているが、多くの状況をカバーする、一般的で教訓的に提示された答えを与えるように注意してください。ありがとう!

2
「自然な」決定不能な言語はありますか?
決定できない「自然な」言語はありますか? 「自然」とは、文字列のプロパティによって直接定義された言語を意味し、機械や同等のものを介してではありません。以下のような言語のルックス言い換えれば、 どこMは TMで、DFA(または正規-EXP)、PDA(または文法)、など。、そしてLはない自然。しかし、L = { x y … ∣ x はy …の接頭辞です}は自然です。L = { ⟨ M⟩ | ... }L={⟨M⟩∣…} L = \{ \langle M \rangle \mid \ldots \}MMMLLL L = { x y… ∣ x はyの接頭辞… }L={バツy…∣バツ yの接頭辞です…}L = \{xy \ldots \mid x \text{ is a prefix of y} …


1
非決定性から余分な力を獲得しないコンテキストフリー言語用のマシン
計算のマシンモデルを検討する場合、通常、チョムスキー階層は(順番に)、有限オートマトン、プッシュダウンオートマトン、線形境界オートマトン、およびチューリングマシンによって特徴付けられます。 最初と最後のレベルでは1(正規言語と帰納的可算言語)、それは我々が決定論的または非決定的なマシンを考慮するかどうかのモデルのパワーに違いはない、すなわちのDFAは、NFAのに相当し、DTMのは非関税措置と同等である2。 ただし、PDAとLBAの場合、状況は異なります。決定論的PDAは、非決定論的PDAよりも厳密に小さい言語セットを認識します。また、決定論的LBAが非決定論的LBAと同程度に強力であるかどうかも重要な未解決の問題です[1]。 これは私の質問を促します: 文脈自由言語を特徴付けるが、非決定論が余計な力を加えない機械モデルはありますか?(そうでない場合、この理由を示唆するCFLのプロパティがありますか?) (私には)文脈自由言語が何らかの形で非決定性を必要とすることは証明できないと思われますが、決定論的なマシンで十分な(既知の)マシンモデルはないようです。 拡張の質問は同じですが、状況依存言語の場合です。 参照資料 S.-Y. 黒田、「言語のクラスと線形境界オートマトン」、情報と制御、7:207-223、1964。 脚注 コメントに対する補足的な質問ですが、チョムスキー階層のレベル(セットを含めることで順序付けされている)が0から3ではなく、3から0になっている理由はありますか? 明確にするために、私は認識のみできる言語について話している。明らかに、複雑さの問題は、このような変更によって根本的な影響を受けます。

2
文脈自由言語は補完の下で閉じられますか?
文脈自由言語は補完の下で閉じられていません、私たちはそれを知っています。 私の知る限り、一部の文字サブセットでコンテキストフリー言語は、complement(!?)の下で閉じられます。a∗b∗a∗b∗a^*b^*a,ba,ba,b これが私の議論です。各CF言語は、半線形パリフイメージます。半線形集合は補数の下で閉じられます。半線形セットを表すベクトルのセットは、線形文法に簡単に変換できます。LLLπ(L)={(m,n)∣ambn∈L}π(L)={(m,n)∣ambn∈L}\pi(L) = \{ (m,n) \mid a^mb^n \in L \} 質問。この事実に簡単にアクセスできる参照はありますか? 技術的には、これらの言語はboundedと呼ばれます。つまり、一部の単語のサブセットです。w∗1…w∗kw1∗…wk∗w_1^* \dots w_k^*w1,…,wkw1,…,wkw_1,\dots,w_k この質問に対する私の動機は、の文脈自由度に関する最近の質問からです。内のその補完は処理が簡単に思えます。{anbm∣n2≠m}{anbm∣n2≠m}\{ a^nb^m \mid n^2 \neq m \}a∗b∗a∗b∗a^*b^*

3
単純な有限正規言語のポンピング補題
ウィキペディアには、通常の言語のポンピング補題の次の定義があります... してみましょうLLL正規言語であること。次に、整数が存在するpppのみに依存≥1 LLLすべての文字列ようなwwwでLLL少なくとも長さのppp(pppとして「ポンピング長」と呼ばれる)を書き込むことができるwww = x yzxyzxyz(すなわち、www分割することができます3つの部分文字列に分割)、次の条件を満たす: | yyy | ≥1 | x yxyxy | ≤ ppp すべてのための私ii ≥0、x y私zxyizxy^iz ∈ LLL 単純な有限の通常の言語では、これがどのように満たされるかわかりません。{ }のアルファベットと正規表現a bがある場合、Lはaの後にb が続く1つの単語のみで構成されます。私は今、私の通常の言語がポンピング補題を満たしているかどうかを見たいです...a 、ba,ba,ba bababLLLaaabbb 私の正規表現では何も繰り返されないため、の値は空でなければならず、すべてのiに対して条件3が満たされます。しかし、もしそうなら、それはyの長さが少なくとも1でなければならないという条件1に失敗します!yyy私iiyyy 代わりに私が聞かせている場合どちらでも、BまたはB、それは条件1を満たしますが、それは実際に自分自身を繰り返したことがないので、条件3を失敗します。yyyaaabbba babab 私は明らかに気が遠くなるほど明らかな何かを見逃しています。どっち?

3
任意の文脈自由文法の解析、ほとんどが短い断片
ユーザー定義のドメイン固有の言語を解析したい。これらの言語は通常、数学表記に近いものです(自然言語を解析していません)。ユーザーは次のようにBNF表記でDSLを定義します。 expr ::= LiteralInteger | ( expr ) | expr + expr | expr * expr 入力のようなもの1 + ( 2 * 3 )は受け入れられなければならず、入力のようなもの1 +は不正確であるとして拒否され、入力のようなもの1 + 2 * 3は曖昧なものとして拒否されなければなりません。 ここでの中心的な困難は、あいまいな文法をユーザーフレンドリーな方法で対処することです。文法を曖昧でないように制限することは選択肢ではありません。それが言語のやり方です。つまり、曖昧さを避けるために必要でない場合は、括弧を省略するほうが好ましいという考え方です。式が曖昧でない限り、解析する必要があり、そうでない場合は拒否する必要があります。 私のパーサーは、文脈に依存しない文法、あいまいなものでも動作し、すべての明確な入力を受け入れなければなりません。受け入れられたすべての入力に解析ツリーが必要です。無効またはあいまいな入力の場合、理想的には適切なエラーメッセージが必要ですが、最初に取得できるものを取り上げます。 私は通常、比較的短い入力でパーサーを呼び出しますが、入力は時々長くなります。したがって、漸近的に高速なアルゴリズムは最良の選択ではないかもしれません。入力が20シンボル未満の約80%、20〜50シンボルの19%、まれに1%のより長い入力の分布に最適化したいと思います。無効な入力の速度は大きな問題ではありません。さらに、DSLが1000〜100000入力ごとに変更されることを期待しています。数分ではなく、文法の前処理に数秒費やすことができます。 典型的な入力サイズを考慮して、どの解析アルゴリズムを調査する必要がありますか?エラー報告は私の選択の要因である必要がありますか、それとも明確な入力の解析に集中し、エラーフィードバックを提供するために完全に別個の低速なパーサーを実行する必要がありますか? (それが必要なプロジェクト(しばらく前)では、CYKを使用しました。これは実装するのにそれほど難しくなく、入力サイズに適切に機能しましたが、非常に良いエラーを生成しませんでした。)

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