非曖昧性は決定論とどのように違いますか?


13

「決定論的文脈自由文法」などの表現で「決定論的」が意味するものを理解しようとしています。(このフィールドには、より決定的な「もの」があります)。最も手の込んだ説明よりも例を挙げていただければ幸いです!可能なら。

混乱の主な原因は、文法のこの特性が(非)曖昧性とどのように異なるかを理解できないことです。

それが何を意味するかを見つけるのに最も近かったのは、D。Knuthの論文からの引用です。 、左から右への言語の翻訳に関するです:

Ginsburg and Greibach(1965)は、決定論的言語の概念を定義しています。セクションVでは、これらがまさにLR(k)文法が存在する言語であることを示しています

あなたがに着くとすぐに円形になります Section Vそこには、LR(k)パーサーが解析できるのは決定論的言語であると言われているからです...


以下は、「あいまいな」の意味を理解するのに役立つ例です。ご覧ください。

onewartwoearewe

one war two ear eweまたはとして解析できますo new art woe are we -文法がそれを許可する場合(たとえば、私がリストしたばかりのすべての単語を持っている)。

このサンプル言語を(非)決定論的にするには、何をする必要がありますか?(たとえば、単語を削除できますo文法からをして、文法が曖昧にならないようにすることができます)。

上記の言語は決定的ですか?

PS。この例は、Godel、Esher、Bach:Eternal Golden Braidの本からのものです。


例の言語の文法を次のように定義するとしましょう。

S -> A 'we' | A 'ewe'
A -> B | BA
B -> 'o' | 'new' | 'art' | 'woe' | 'are' | 'one' | 'war' | 'two' | 'ear'

文字列全体を解析する必要があるという議論により、この文法は言語を非決定的にしますか?


let explode s =
  let rec exp i l =
    if i < 0 then l else exp (i - 1) (s.[i] :: l) in
  exp (String.length s - 1) [];;

let rec woe_parser s =
  match s with
  | 'w' :: 'e' :: [] -> true
  | 'e' :: 'w' :: 'e' :: [] -> true
  | 'o' :: x -> woe_parser x
  | 'n' :: 'e' :: 'w' :: x -> woe_parser x
  | 'a' :: 'r' :: 't' :: x -> woe_parser x
  | 'w' :: 'o' :: 'e' :: x -> woe_parser x
  | 'a' :: 'r' :: 'e' :: x -> woe_parser x
  (* this line will trigger an error, because it creates 
     ambiguous grammar *)
  | 'o' :: 'n' :: 'e' :: x -> woe_parser x
  | 'w' :: 'a' :: 'r' :: x -> woe_parser x
  | 't' :: 'w' :: 'o' :: x -> woe_parser x
  | 'e' :: 'a' :: 'r' :: x -> woe_parser x
  | _ -> false;;

woe_parser (explode "onewartwoearewe");;
- : bool = true

| Label   | Pattern      |
|---------+--------------|
| rule-01 | S -> A 'we'  |
| rule-02 | S -> A 'ewe' |
| rule-03 | A -> B       |
| rule-04 | A -> BA      |
| rule-05 | B -> 'o'     |
| rule-06 | B -> 'new'   |
| rule-07 | B -> 'art'   |
| rule-08 | B -> 'woe'   |
| rule-09 | B -> 'are'   |
| rule-10 | B -> 'one'   |
| rule-11 | B -> 'war'   |
| rule-12 | B -> 'two'   |
| rule-13 | B -> 'ear'   |
#+TBLFM: @2$1..@>$1='(format "rule-%02d" (1- @#));L

Generating =onewartwoearewe=

First way to generate:

| Input             | Rule    | Product           |
|-------------------+---------+-------------------|
| ''                | rule-01 | A'we'             |
| A'we'             | rule-04 | BA'we'            |
| BA'we'            | rule-05 | 'o'A'we'          |
| 'o'A'we'          | rule-04 | 'o'BA'we'         |
| 'o'BA'we'         | rule-06 | 'onew'A'we'       |
| 'onew'A'we'       | rule-04 | 'onew'BA'we'      |
| 'onew'BA'we'      | rule-07 | 'onewart'A'we'    |
| 'onewart'A'we'    | rule-04 | 'onewart'BA'we'   |
| 'onewart'BA'we'   | rule-08 | 'onewartwoe'A'we' |
| 'onewartwoe'A'we' | rule-03 | 'onewartwoe'B'we' |
| 'onewartwoe'B'we' | rule-09 | 'onewartwoearewe' |
|-------------------+---------+-------------------|
|                   |         | 'onewartwoearewe' |

Second way to generate:

| Input             | Rule    | Product           |
|-------------------+---------+-------------------|
| ''                | rule-02 | A'ewe'            |
| A'ewe'            | rule-04 | BA'ewe'           |
| BA'ewe'           | rule-10 | 'one'A'ewe'       |
| 'one'A'ewe'       | rule-04 | 'one'BA'ewe'      |
| 'one'BA'ewe'      | rule-11 | 'onewar'A'ewe'    |
| 'onewar'A'ewe'    | rule-04 | 'onewar'BA'ewe'   |
| 'onewar'BA'ewe'   | rule-12 | 'onewartwo'A'ewe' |
| 'onewartwo'A'ewe' | rule-03 | 'onewartwo'B'ewe' |
| 'onewartwo'B'ewe' | rule-13 | 'onewartwoearewe' |
|-------------------+---------+-------------------|
|                   |         | 'onewartwoearewe' |

1
-1質問が今意味をなさないので。まず、文字列は言語ではありません。文字列は、曖昧さ、曖昧さ、決定論的または非決定論的ではありません。それらは単なる文字列です。指定した文法では、サンプル文字列は生成されません。180の派生物すべてをチェックして重複があるかどうかを確認したわけではありませんが、理論的には、文法が曖昧かどうかを確認するために必要なことはこれだけです。悲しいことに、言語は有限であり、したがって規則的であり、したがってDPDAによって受け入れられ、したがって決定論的であるため、本質的に曖昧にすることはできません。
-Patrick87

@ Patrick87ええ?文字列言語であると言うのはどこですか?この文字列は製品の例であり、特定の文法を使用して生成できることを確認してください。そうでないと思う理由は何ですか?問題の文字列は、ルールアプリケーションの2つの異なるシーケンスが同じ文字列を生成するため、文法があいまいになりますが、一部のルール(たとえば、B -> 'o')を削除すると、あいまいになりません...
wvxvw

まず、文法を使用してサンプル文字列の派生を提供してください。あなた自身の質問から:「上記の言語は決定論的ですか?」提案する言語ではありませんが、無限の文法によって生成された言語ではなく、単なる文字列に名前を付けます。
Patrick87

英語で書けますか?例えば、「スタートでSルールを適用することにより。S := ...、我々が得る......、」
Patrick87

@ Patrick87ステップバイステップの生成手順を追加し、文法の誤りを修正したことに気付きました。
wvxvw

回答:


9

PDAは決定論的であり、したがってDPDAです。オートマトンの到達可能なすべての構成に対して、最大で1つの遷移があります(つまり、最大で1つの新しい構成が可能)。2つ以上の一意の移行が可能な構成に到達できるPDAがある場合、DPDAはありません。

例:

Σ = Γ = { a b }の次のPDAファミリーを考えます。Q={q0q1}Σ=Γ={ab}および δであるます。A=q0δ

q    e    s    q'   s'
--   --   --   --   --
q0   a    Z0   q1   aZ0
q0   a    Z0   q2   bZ0
...

初期構成q_0, Z0は到達可能であるため、これらは非決定的PDA ですa。入力シンボルがの場合、そこから2つの有効な遷移があります。このPDAがで始まる文字列を処理しようとするたびにa、選択肢があります。選択とは、非決定的であることを意味します。

代わりに、次の遷移表を検討してください。

q    e    s    q'   s'
--   --   --   --   --
q0   a    Z0   q1   aZ0
q0   a    Z0   q2   bZ0
q1   a    a    q0   aa
q1   a    b    q0   ab
q1   a    b    q2   aa
q2   b    a    q0   ba
q2   b    b    q0   bb
q2   b    a    q1   bb

このPDAは非決定的であると思われるかもしれません。結局のところ、q1, b(a+b)*たとえば、構成から離れた2つの有効な遷移があります。ただし、この構成はオートマトンを介したどのパスからも到達できないため、カウントされません。唯一の到達可能な構成は、、、およびのサブセットでありq_0, (a+b)*Z0、これらの構成ごとに、最大で1つの遷移が定義されます。q1, a(a+b)*Z0q2, b(a+b)*Z0

CFLは、一部のDPDAの言語である場合、決定論的です。

すべての文字列がCFGに応じて最大で1つの有効な派生を持っている場合、CFGは明確です。それ以外の場合、文法はあいまいです。CFGがあり、いくつかの文字列に対して2つの異なる派生ツリーを生成できる場合、曖昧な文法があります。

CFLは、明確なCFGの言語でない限り、本質的にあいまいです。

次のことに注意してください。

  • 決定論的なCFLは、DPDAの言語でなければなりません。
  • すべてのCFLは、無限に多くの非決定論的PDAの言語です。
  • 本質的に曖昧なCFLは、明確なCFGの言語ではありません。
  • すべてのCFLは、無限に多くのあいまいなCFGの言語です。
  • 本質的に曖昧なCFLは決定論的ではありません。
  • 非決定的CFLは、本質的に曖昧である場合とそうでない場合があります。

1
ウィキはPDAは決定論的ではないと言います(決定論的バージョンと非決定論的バージョンがあるかもしれません)が、文の最初の部分を省略することもできます、それはあなたが言っていることに実際には貢献していません:/決定論的何かの入力言語としての決定論的言語。決定論的言語を受け入れるため、その何かは決定論的と呼ばれます-「緑は草の色だから草は緑だ」と言っているようなものです。それは本当ですが、
役に立た

@wvxvw:これを正しく読んでいない。「すべての状態/シンボル/スタックトップトリプルに次の状態が1つしかない場合に限り、PDAは決定論的です。」その定義には、オートマトンが受け入れる言語については何もありません。
さまようロジック

2
@wvxvw決定論的PDAまたはDPDAの定義は、決定論的文脈自由言語の定義に依存しません。オートマトンのプロパティのみに基づいてDPDAを定義します。次に、DPDAの定義に関して、決定論的CFLを定義します。これらとWandering Logicのコメントを踏まえて回答を読み直し、これが理にかなっているかどうかを確認してください。簡単な例をいくつかご紹介します。
Patrick87

q1ba+bq2ba+bQ={q0q2}現在のキャラクター?また、私の解釈は正しいですか?x+-1つ以上x(x)*-0つ以上x
wvxvw

@wvxvw構成は、スタックの現在の状態と現在の内容を指します。x+通常、「1つ以上」を指しますがxx*通常「0つ以上」を指しxます。これらは同一なのでxx*、の代わりに使用できますx+
Patrick87

7

次に例を示します(Wikipediaから)。

S0S0|1S1|ε

文脈自由言語は、その言語を受け入れる決定論的プッシュダウンオートマトンが少なくとも1つ存在する場合にのみ決定論的です。(言語を受け入れる多くの非決定論的プッシュダウンオートマトンもありますが、それでも決定論的言語です。)本質的に決定論的プッシュダウンオートマトンは、マシンの遷移が現在の状態に基づいて決定論的に決定されるものです。入力シンボルとスタックの現在の最上位シンボル確定的ここでは、状態/入力シンボル/最上位スタックシンボルに対して状態遷移が1つしか存在しないことを意味します。状態/入力シンボル/最上位スタックシンボルトリプルに対して2つ以上の次の状態がある場合、オートマトンは非決定的です。(オートマトンが受け入れるかどうかを判断するために、どの遷移を行うかを「推測」する必要があります。)

Knuthが証明したのは、すべてのLR(k)文法に決定論的プッシュダウンオートマトンがあり、すべての決定論的プッシュダウンオートマトンにLR(k)文法があることです。したがって、LR(k)文法と決定論的プッシュダウンオートマトンは、同じ言語セットを処理できます。しかし、それらを受け入れる決定論的プッシュダウンオートマトンを備えた言語のセットは、(定義により)決定論的言語です。引数は循環的ではありません。

したがって、決定論的言語は、明確な文法が存在することを意味します。そして、決定論的なプッシュダウンオートマトンを持たない明確な文法を示しました(したがって、それは非決定論的な言語を受け入れる明確な文法です)。

{anbmcmdn|nm>0}{anbncmdm|nm>0}{anbnccdn|n>0}


中間を決定する前に文字列全体を確認する必要があるため、この言語が非決定的になる理由を詳しく説明してください。「決定論的」とは何かについて別の説明を読みましたが、そこには「解析時にバックトラックする必要がない場合、その言語は決定論的です」と書かれています。この言語を解析するためにバックトラックする必要はありません
...-wvxvw

1
入力文字列「10011001」を検討してください。プッシュダウンオートマトンは、文字列が最後まで到達するまでの長さを知りません。2番目の0に到達したら、選択する必要があります。これは4文字の文字列「1001」ですか、または「100 ???? 001」のように見える長い文字列ですか?5番目の文字に到達しても、まだわかりません。これは、8文字の文字列「10011001」または「10011 ???? 11001」のような長い文字列ですか?
さまようロジック

1
「文字列全体を解析する」ことは、非決定論的な定義ではありません。それは、私が付け加えようとしていた直感に過ぎませんでした。@ Patrick87と私は両方とも、決定論の真の定義を提供しました。すべての状態から、最大で1つの次の状態があります。言語に明確な文法がない場合は、非決定的でなければなりません。あなたが存在しないことを証明する必要があり、あなたがあいまいな文法を示してきたが、それは重要なものではありません:私は多くの作業を行うことなく、あなたの例についてはお答えすることはできません何もあなたがいることを示したい場合は明確な文法は言語は本質的に曖昧です。
さまようロジック

1
@wvxvw計算手順を探している場合、運が悪い可能性があります... en.wikipedia.org/wiki/List_of_undecidable_problemsによると、CFGが曖昧かどうかは言うまでもなく、その言語が本質的に曖昧かどうかは言うまでもありません; CFGがすべての文字列を生成するかどうかも決定できません。このことを考えると、CFGの言語が決定論的なCFLであるかどうかを決定できず、決定するのがはるかに効率的ではないことを真剣に疑います。
Patrick87

1
@wvxvwもしあなたがそれと同じくらい幸運であるなら、あなたは私たちが幸せなケースと呼んでいるものを扱っています。多くの幸せなケースで機能し、残りの部分で爆発しないヒューリスティックを定義できますが、すべての幸せなケースで機能するわけではありません。そうした場合、問題の決定者がいることになりますが、これは私たちの前提では不可能です。
Patrick87

5

決定論的コンテキストフリー言語は、いくつかの決定論的プッシュダウンオートマトンで受け入れられる言語です(コンテキストフリー言語は、非決定的プッシュダウンオートマトンで受け入れられる言語です)。そのため、文法ではなく言語のプロパティです。対照的に、曖昧性は文法の特性ですが、固有の曖昧性はは言語の特性です(言語の文脈自由文法がすべて曖昧な場合、文脈自由言語は本質的に曖昧です)。

この2つの定義にはつながりがあります。この質問への回答に示されているように、決定論的コンテキストフリー言語は本質的に曖昧ではありません。


申し訳ありませんが、それはあまり役に立ちません。私は実際にDPDAから始めましたが、それが決定論と呼ばれる理由を説明することはありません。これは、ウィキペディア/他の論文のグーグルで簡単に見つけられる定義です。しかし、文法/言語/パーサーのどのプロパティが「決定論的」という言葉で記述されているのでしょうか?言い換えれば、文法が決定論的と呼ばれるためには、文法で何が起こるべきでしょうか?
wvxvw

申し訳ありませんが、コメントが多すぎる場合。混乱は、たとえば、特定の言語を見て、それが決定論的であるかどうかを見分けることができず、その言語の「決定論」を特定し始める場所がわからないためです。決定論的であり、その後非決定論的となるように変更された言語の例は、非常に役立ちます。
wvxvw

1
LRk

1
申し訳ありませんが、まだ役に立ちません。あなたの言っていることは理解できますが、決定論的な言語を認識し、非決定論的な言語と区別するのは助けになりません。例を挙げましょう。バランスのとれた括弧の問題を引き起こす生産規則が言語にある場合、FSMで解析できないことがすぐにわかります。(スタックが必要になるため)。しかし、あなたが別の形式主義に言及するとき、それは再帰的になります。それは、その言語が他の言語とどのように異なるべきかを理解するのを助けません。
wvxvw

言い換えれば(前のコメントで述べたように)、同じ「ソート」の決定論的および非決定論的コンテキストフリー言語の例が必要です。おそらくあなたはそれについて焦点を絞った質問をするべきです。
ユヴァルフィルマス

1

{ab}{wa+bw=wR}SaSa|bSb|a|b|ϵababab


1

定義

  1. 決定論的なプッシュダウンアクセプター(DPDA)その動きに選択肢を持っていることはありませんプッシュダウンオートマトンです。
  2. DPDAとNPDAは同等ではありません。
  3. A CFGはある非決定性がある場合に限って、少なくともそれらの右側に同じ端末プレフィックスを持つ2つの作品は。
  4. A CFGがある曖昧存在IFF 一部有するW∈L(G)少なくとも二つの別個の導出木。したがって、2つの異なる派生ツリーに対応する2つ以上の左端または右端の派生があります。
  5. A CFGはある明確な場合に限っすべての文字列があり、最大で CFGに従ってつの有効な派生。それ以外の場合、文法はあいまいです。
  6. A CFLはある本質的に曖昧それはの言語ではないときに限り任意の明確なCFG。DPDAを含めることはできません。
    場合は、すべての CFLを生成文法が曖昧で、その後、CFLが呼ばれている本質的に曖昧。したがって明確なCFGの言語ではありません。

事実

  1. すべてのCFLは、無限に多くの非決定論的PDAの言語です。
  2. すべてのCFLは、無限に多くのあいまいなCFGの言語です。
  3. 一部の DPDAで受け入れられている CFL は、本質的に曖昧ではありません。(少なくとも1つの明確なCFGが存在します。)
  4. NDPDAによって受け入れられたCFLは、DPDA (または明確なCFG)が存在する可能性があるため本質的に曖昧である場合とそうでない場合があります。
  5. あいまいなCFGによって生成されたCFLは、あいまいでないCFG(またはDPDA)が存在する可能性があるため本質的にあいまいな場合とそうでない場合があります。
  6. 少なくとも1つによって生成さたCFL明確なCFGは、本質的に曖昧ではありません。(DPDAがいくつか存在します。)
  7. 非決定的文法は曖昧であっても曖昧でなくてもよい。

あなたの質問への回答(決定論と曖昧さの関係)

  1. (非)あいまいさは主に文法(ここではCFG)に適用されます。(非)決定論は、文法とオートマトン(ここではPDA)の両方に適用されます。

    論理的な違いが必要な場合は、ファクトセクションの最後の4つのポイントを見て、あいまいさと決定論の両方を関連付けようとすることができます。ここでもう一度繰り返します。

  2. ある決定論的 PDA によって受け入れられたCFL は本質的に曖昧ではありません。(少なくとも1つの明確なCFGが存在します。)

  3. 非決定性 PDAで受け入れられたCFLは、DPDA(または明確な CFG)が存在する可能性があるため、本質的に曖昧である場合とそうでない場合があります。
  4. あいまいな CFG によって生成されたCFLは、あいまいでないCFG(または決定論的な PDA)が存在する可能性があるため、本質的にあいまいな場合とそうでない場合があります。
  5. 少なくとも1つの明確な CFG によって生成されたCFL は、本質的に曖昧ではありません。(DPDAがいくつか存在します。)
  6. 非決定論的文法はまたはであってもなくてもよいあいまいな

PS:

  1. 受け入れられた答えは、「CFLは決定論的」、「決定論的CFL」、「CFLは決定論的でない」、「非決定論的CFL」などの行を使用します。「決定論的」および「曖昧」という形容詞はCFLには適用されず、PDAおよびCFGに適用されると思います。それからポイント。(実際、私は文字通りその答えからいくつかの行を貼り付けてコピーしました。)しかし、それでももっと正確にすべきだと感じました。そこで、ここでは、2つの部分の定義と事実に基づいて、より明確に物事を記述しようとしました(不必要に冗長で長くした可能性があります)。元の回答を編集する必要があったと思いますが、その場合は上記の行を使用する多くのポイントを削除する必要があります。そして、これが完全な書き換えを伴うため、これが有効な編集になるかどうかはわかりません。
  2. 異なる定義や事実の比較の違いを強調するために、量的な言葉を太字で示しています。定義用語は太字のみです。
  3. いくつかのポイントを自分で作ったので、ここですべてのポイントの正確性について知識のある人からの確認が必要です。

PS 1は間違っています:決定論的/あいまいなCFLには標準的な定義があります。つまり、すべての CFGが決定論的/あいまいなCFLであると定義されています。
reinierpost

事実7が間違っていることに気づきました。また、最後から2番目のリストのポイント6は同じであり、間違っています。
マハ

確かに...決定論は構文解析中のどの時点でも曖昧さを持たないため、曖昧さよりも厳密に強い(つまり構文解析が完了したでも曖昧さ)。
reinierpost
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.