Чим неоднозначність відрізняється від детермінізму?


13

Я намагаюся зрозуміти, що мається на увазі під "детермінованим" в таких виразах, як "детермінована граматика без контексту". (У цьому полі є детермінованіші "речі"). Я би вдячний прикладом більше, ніж найяскравішим поясненням! Якщо можливо.

Моє основне джерело плутанини - це не в змозі сказати, чим ця властивість граматики відрізняється від неоднозначності.

Найближчим чином я знайшов, що це означає, це цитата з статті Д. Кнут про переклад мов зліва направо :

Гінзбург і Грейбах (1965) визначили поняття детермінованої мови; ми показуємо у розділі V, що це саме мови, для яких існує граматика LR (k)

що стає круговим, як тільки ви дістаєтесь до Section V, тому що там написано, що те, що LR (k) може розбирати, - це детермінована мова ...


Нижче наведено приклад, який я міг би знайти, щоб допомогти мені зрозуміти, що означає "амбітний", будь ласка, погляньте:

onewartwoearewe

Який можна проаналізувати як one war two ear eweабо o new art woe are we- якщо граматика дозволяє це (скажіть, у ньому є всі слова, які я щойно перерахував).

Що мені потрібно зробити, щоб зробити цей приклад мовою (не) детермінованою? (Я міг би, наприклад, вилучити слово oз граматики, зробити граматику неоднозначною).

Чи є детермінованою вищезгадана мова?

PS. Приклад із книги Годель, Ешер, Бах: Вічна золота коса.


Скажімо, ми визначаємо граматику для прикладної мови так:

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 так? Де це говорить про те , що рядок є мовою? Цей рядок є прикладом продукту, і впевнений, що можна створити, використовуючи задану граматику. Що змушує вас думати інакше? Розташований рядок - це саме той випадок, коли дві різні послідовності програм правил створюють один і той же рядок, таким чином, граматика неоднозначна, але якщо ви видалите деякі правила (наприклад B -> 'o', тоді, вона вже не буде неоднозначною ...
wvxvw

По-перше, ви можете надати, будь ласка, виведення прикладу рядка, використовуючи граматику? З вашого власного запитання: "Чи є вищезазначена мова детермінованою?" Ви ніколи не називаєте мову, а лише рядок, породжений нескінченністю граматик, хоч і не той, який ви пропонуєте.
Patrick87

Ви можете написати це англійською мовою? Наприклад, "Почніть з S. Застосовуючи правило S := ..., ми отримуємо ..., ..."
Patrick87

@ Patrick87 Я додав покрокову процедуру генерації, а також зрозумів, що помилився в граматиці, яку я виправив.
wvxvw

Відповіді:


9

PDA є детермінованим, отже, DPDA, якщо для кожної доступної конфігурації автомата існує максимум один перехід (тобто максимум одна нова конфігурація). Якщо у вас є КПК, який може досягти певної конфігурації, для якої можливі два або більше унікальних переходів, у вас немає DPDA.

Приклад:

Q={q0,q1}Σ=Γ={a,b}A=q0δ

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

Це недетерміновані КПК, оскільки початкова конфігурація - q_0, Z0- доступна, і є два дійсних переходи, що ведуть від неї, якщо є вхідним символом a. Кожен раз, коли цей КПК почне намагатися обробити рядок, який починається з 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

Ви можете спокуситись сказати, що цей КПК не є детермінованим; зрештою, є два допустимі переходи, наприклад, від конфігурації q1, b(a+b)*. Однак, оскільки ця конфігурація недоступна жодним шляхом через автомат, вона не враховується. Єдиний досяжні конфігурації є підмножиною q_0, (a+b)*Z0, q1, a(a+b)*Z0і q2, b(a+b)*Z0, і для кожного з цих конфігурацій, в кращому випадку один перехід визначено.

CFL є детермінованим, якщо мова йде про DPDA.

CFG є однозначним, якщо кожна рядок має щонайменше одне дійсне виведення відповідно до CFG. Інакше граматика неоднозначна. Якщо у вас є CFG і ви можете створити два різних похідних дерева для якоїсь струни, у вас є неоднозначна граматика.

CFL за своєю суттю неоднозначний, якщо це не мова жодної однозначної CFG.

Зверніть увагу на наступне:

  • Детермінований CFL повинен бути мовою деяких DPDA.
  • Кожен CFL є мовою нескінченно багатьох недетермінованих КПК.
  • По суті, неоднозначна CFL не є мовою жодної однозначної CFG.
  • Кожна CFL - мова нескінченно багатьох неоднозначних CFG.
  • Суттєво неоднозначний CFL не може бути детермінованим.
  • Недетермінований КФЛ може бути, а може і не бути суттєво неоднозначним.

1
Wiki каже, що PDA не є детермінованим (може бути детермінованою версією та недетермінованою), але ви також можете пропустити першу частину речення, це не дуже сприяє тому, що ви говорите: / Але, знову ж таки, це визначає детермінована мова як вхідна мова детермінованого чогось, і те, що називається детермінованим, тому що воно приймає детерміновану мову - це як сказати "трава зелена, тому що зелений колір трави". Це правда, але не корисно :( Будь ласка, приклад був би більш дорогоцінним!
wvxvw

@wvxvw: ти читаєш це неправильно. У ньому сказано: "КПК є детермінованим тоді і лише тоді, коли кожен трійка стану / символу / стека має лише одне наступне стан". У цьому визначенні немає нічого про те, яку мову приймає автомат.
Блукаюча логіка

2
@wvxvw Визначення детермінованого PDA, або DPDA, яке я не даю, ані форми, ані форми, покладається на визначення вільної мови детермінованого контексту. Я визначаю DPDA на основі лише властивостей автомата. Потім я визначаю, що таке детермінований CFL з точки зору визначення DPDA. Будь ласка, перечитайте відповідь у світлі цих коментарів та коментарів Мандрівної логіки та спробуйте переконатися, чи є це сенсом. Я постараюся навести кілька коротких прикладів.
Patrick87

q1,b(a+b)q2,b(a+b)Q={q0,...q2}поточний персонаж? Також правильне моє тлумачення? x+- один чи більше x, (x)*- нуль чи більше x?
wvxvw

Конфігурація @wvxvw стосується поточного стану та поточного вмісту стеку. x+як правило, відноситься до "одного або декількох x, тоді як x*типово відноситься до" нуля або більше x; Я можу використовувати xx*замість x+, оскільки вони однакові.
Patrick87

7

Ось приклади (з Вікіпедії):

S0S0|1S1|ε

Мова, вільна від контексту, є детермінованою тоді і лише тоді, коли існує принаймні один детермінований автоматичний поштовх, що приймає цю мову. (Можливо, також може бути багато недетермінованих автоматичних поштовху, які приймають мову, і це все одно буде детермінованою мовою.) По суті, детерміновані автоматизатори, що висуваються, це ті, де машинні переходи детерміновано базуються на поточному стані, символ введення та поточний верхній символ стека . Детермінованийтут означає, що для будь-якого стану / вхідного символу / верхнього символу стека немає більше одного переходу стану. Якщо у вас є два або більше наступних станів для деякого символу стану / вводу / верхнього символу стека втричі, то автомат не детермінований. (Вам потрібно буде "здогадатися", який перехід потрібно зробити, щоб вирішити, приймає автомат чи ні.)

Що довів Кнут, це те, що кожна грамота LR (k) має детермінований автоматичний виштовхування і що кожен детермінований автоматичний виштовхування має граматику LR (k). Таким чином, граматики LR (k) та детерміновані автоматичні автоматичні розробки можуть працювати з одним і тим же набором мов. Але набір мов, що мають детермінований автоматичний вимикач, який приймає їх, є (за визначенням) детермінованими мовами. Аргумент не круговий.

Отже, детермінована мова означає, що існує однозначна граматика. І ми показали однозначну граматику, яка не має детермінованого автоматичного вимикання (і, отже, це однозначна граматика, яка приймає недетерміновану мову.)

{anbmcmdn|n,m>0}{anbncmdm|n,m>0}{anbnccdn|n>0}


Чи можете ви, будь ласка, докладно пояснити, чому необхідність перегляду цілого рядка перед визначенням середини робить цю мову недетермінованою? Я прочитав ще одне пояснення, що таке "детерміністичний", і там написано, що "якщо вам не потрібно робити зворотній рух під час розбору, ця мова є детермінованою". Я не бачу необхідності
відслідковувати

1
Розглянемо рядок введення "10011001". Автомати, що висуваються, не знають, скільки часу буде струна до її закінчення. Коли ви перейдете до другого 0, вам потрібно зробити вибір: це 4-символьний рядок "1001" чи довший рядок, який виглядає як "100 ???? 001"? Коли ви дістаєтесь до п'ятого символу, ви все ще не знаєте: це 8-символьна рядок "10011001" чи довша рядок, що має вигляд "10011 ???? 11001"?
Блукаюча логіка

1
Справа "розбір цілого рядка" - це не визначення недетермінованого. Я просто намагався додати інтуїцію. І @ Patrick87, і я дали вам реальне визначення детермінованого: З кожного штату існує максимум один наступний стан. Якщо мова не має однозначної граматики, вона повинна бути недетермінованою. Я не можу відповісти про ваш приклад, не роблячи більше роботи: ви показали неоднозначну граматику, але це не важливо, вам потрібно продемонструвати, що немає однозначної граматики, якщо ви хочете показати, що мова за своєю суттю неоднозначна.
Блукаюча логіка

1
@wvxvw Якщо ви шукаєте обчислювальну процедуру, вам, швидше за все, не пощастить ... згідно із en.wikipedia.org/wiki/List_of_undecidable_problems , не можна визначити, чи є CFG неоднозначним, не кажучи вже про те, чи мова його суттєво неоднозначна. ; також не можна визначити, чи створює CFG всі рядки. Враховуючи це, я серйозно сумніваюся, що вирішити, чи є мова CFG є детермінованою CFL, набагато менш ефективно.
Patrick87

1
@wvxvw Якщо вам так пощастило, ви маєте справу з тим, що ми називаємо щасливим випадком, тобто не одним із випадків, що робить це нерозв'язною проблемою. Ви можете визначити евристику, яка працює для безлічі щасливих випадків і не вибухає на решті, але вони не працюватимуть на всіх щасливих випадках; якби вони це зробили, ви б вирішили проблему, що, на нашу думку, неможливо.
Patrick87

5

Детерміновані без контекстні мови - це ті, які приймаються деяким детермінованим автоматичним виштовхуванням (без контекстних мов - це ті, які приймаються деяким недетермінованим автоматичним натисканням). Таким чином, це властивість мови, а не граматики . Навпаки, неоднозначність є властивістю граматики, тоді як притаманна неоднозначність є властивістю мови (безконтекстна мова за своєю суттю неоднозначна, якщо кожна без контекстна граматика для мови неоднозначна).

Між двома визначеннями існує зв'язок: детерміновані без контексту мови ніколи не бувають неоднозначними, як показано у відповіді на це питання .


Вибачте, це не дуже корисно. Я фактично почав з DPDA, але це ніколи не пояснює, чому це називається детермінованим. Це визначення, яке легко знайти в Wikipedia / Googling для інших робіт. Але яка властивість граматики / мови / парсера описується словом "детермінований"? Іншими словами, що має статися в граматиці, щоб її можна було назвати детермінованою?
wvxvw

Вибачте, якщо я коментую занадто багато. Плутанина полягає в тому, що я не можу сказати з, скажімо, дивлячись на якусь мову, детермінізована вона чи ні, і не знала б з чого почати визначити "детермінізм" мови. Приклад мови, яка детермінована, а потім змінена способом, який робить її недетермінованою, був би дуже корисним.
wvxvw

1
LR(k)

1
Вибачте, все ще не корисно. Я розумію, що ви говорите, але це не допомагає мені розпізнавати детерміновану мову та розмовляти нею, ніж недетермінованою. Для прикладу: якщо в мові є правило виробництва, яке створює проблему врівноважених дужок, я одразу знаю, що вона не може бути розібрана FSM. (Тому що це вимагатиме стека). Але коли ти просто згадуєш про інший формалізм, він стає лише рекурсивним, це не допомагає мені зрозуміти, як ця мова повинна відрізнятися від іншої.
wvxvw

Іншими словами (як ви згадували в попередньому коментарі), ви хочете приклади детермінованих та недетермінованих контекстних мов того ж «сорту». Можливо, вам слід задати цілеспрямоване питання з цього приводу.
Yuval Filmus

1

{a,b}{w(a+b)w=wR}SaSa|bSb|a|b|ϵababab


1

Визначення

  1. Детермінований магазинний акцептор (DPDA) є магазинним автоматом , який ніколи не має вибору в своєму русі.
  2. DPDA та NPDA не є рівнозначними.
  3. CFG є детермінований тоді і тільки тоді є по крайней мере , дві постановки з таким же терміналу префікса на правого боку від них.
  4. CFG є неоднозначним , якщо існує деяка W ∈ L (G) , який має принаймні два різних дерев виведення. Таким чином, він має дві або більше лівих або найправіших похідних, що відповідають двом різним деревам походження.
  5. CFG є недвозначним тоді і тільки тоді кожна рядок має максимум один дійсний висновок в відповідно до CFG. Інакше граматика неоднозначна.
  6. КЛЛ є по своїй природі неоднозначним тоді і тільки тоді це не мова якої - або однозначною CFG. У ньому не може бути жодної DPDA.
    Якщо кожна граматика, що генерує CFL, неоднозначна, то CFL називається по суті неоднозначною . Таким чином, це не мова жодних однозначних CFG.

Факти

  1. Кожен CFL є мовою нескінченно багатьох недетермінованих КПК.
  2. Кожна CFL - мова нескінченно багатьох неоднозначних CFG.
  3. CFL, прийнятий деяким DPDA, по суті не є неоднозначним. (Для цього існує принаймні одна однозначна CFG.)
  4. CFL, прийнятий NDPDA, може бути або не бути суттєво неоднозначним, оскільки для нього може існувати деяка DPDA (або однозначна CFG).
  5. CFL, породжений неоднозначною CFG, може бути, а може і не бути за своєю суттю неоднозначним, оскільки може існувати якась однозначна CFG (або DPDA) для неї.
  6. CFL, що генерується принаймні однією однозначною CFG, по суті не є неоднозначним. (Для цього існує деяка DPDA.)
  7. Недетермінована граматика може бути, а може бути і неоднозначною.

Відповідь на ваше запитання (співвідношення між детермінізмом та неоднозначністю)

  1. (Не) двозначність стосується переважно граматик (тут CFG). (Не) детермінізм застосовується як до граматики, так і до автомата (тут КПК).

    Якщо ви хочете логічних розбіжностей, ви можете переглянути останні чотири пункти в розділі фактів, коли вони намагаються співвідносити як двозначність, так і детермінізм. Ось я їх повторюю ще раз:

  2. CFL, прийнятий деяким детермінованим КПК, не є за своєю суттю неоднозначним . (Для цього існує принаймні одна однозначна CFG.)

  3. CFL, прийнятий недетермінованим КПК, може бути або не бути суттєво неоднозначним, оскільки для нього може існувати деяка DPDA (або однозначна CFG).
  4. CFL, породжений неоднозначною CFG, може бути, а може і не бути по суті неоднозначним, оскільки для нього може існувати якась однозначна CFG (або детермінований КПК).
  5. CFL, що генерується принаймні однією однозначною CFG, по суті не є неоднозначним . (Для цього існує деяка DPDA.)
  6. Чи не детермінована граматика може або не може бути неоднозначною .

PS:

  1. У прийнятій відповіді використовуються рядки на кшталт "CFL детермінований", "детермінований CFL", "CFL не може бути детермінованим", "недетермінований CFL". Я припускаю, що прикметники «детермінований» та «неоднозначний» не стосуються CFL, а PDA та CFG (хоча прикметник «за своєю суттю неоднозначний» застосовується і до CFL) Хоча я не хочу критикувати оригінальну відповідь, оскільки я сам дізнався вирішальне значення бали від неї. (Насправді я буквально скопіював декілька рядків з цієї відповіді.) Але все ж я вважав, що це слід зробити більш правильним. Тож я спробував тут чіткіше викласти матеріали у двох частинах визначення та фактів (я, можливо, зробив це зайвим багатослівним та довгим). Напевно, я мав би відредагувати оригінальну відповідь, але тоді це передбачає видалення багатьох точок, які використовують вище рядки. І я не знаю, чи це дозволить зробити це будь-яким дійсним редагуванням, оскільки воно буде мати повне перезапис.
  2. Зауважте, що я поставив кількісні слова жирним шрифтом, щоб виділити порівняльні відмінності в різних визначеннях та фактах. Терміни визначення є лише жирними .
  3. Кілька пунктів я зробив сам, тому мені знадобиться підтвердження від того, хто тут знає, щодо правильності кожного пункту.

PS 1 є неправильним: існує стандартне визначення для детермінованих / неоднозначних КФЛ, а саме вони визначаються як ті, для яких всі CFG є детермінованими / неоднозначними.
reinierpost

щойно зрозумів факт 7 - це неправильно. Пункт 6 із другого останнього списку такий самий і неправильний.
Маха

Дійсно ... детермінізм не має двозначності в жодному моменті під час розбору, тому він суворо сильніший за двозначність (тобто неоднозначність навіть після завершення розбору).
reinierpost
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.