Як зрозуміти інтуїтивно, що мова є регулярною


9

З огляду на мову , як я можу сказати безпосередньо, не дивлячись на правила виробництва, що ця мова не є регулярною?L={anbncn}

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


1
Будь-хто може подивитися на будь-яку мову і просто сказати, що це не регулярно. Я не впевнений, що інтуїція сама по собі тут грає стільки, скільки є досвід. Це досить проста мова (незважаючи на те, що вона є нерегулярною), і неминуче зустрічається при вивченні формальних мов. Після того, як вам сказали, що це не регулярно, і ви довели, що це не регулярне використання будь-яких дійсних методів доказування, вам, як правило, не потрібні докази, щоб переконати інших людей, тому що всі вони довели це самі, коли їх знайомили з предмет.
Patrick87

так, але іноді на лекціях вони просто дотримуються сухих математичних доказів, але їм справді не вистачає інтуїтивних пояснень з простими простими прикладами
доніор

Забудьте . Ви коли-небудь відчували, що не є регулярним? анбнcнанбн
Удай Редді

2
Дивлячись на граматику і проголошувати, оскільки граматика не є регулярною, мова не є регулярною, це помилка. Існує безліч нерегулярних граматик для звичайних мов. Остерігайся! Однак, вирішити, чи граматика є регулярною, легко; просто перевірити постановки.
Рафаель

Відповіді:


11

Основна властивість DFA / NFA - це відсутність необмеженої пам'яті. Якщо ви подивитеся на мову та єдиний алгоритм (який згодом слід перекласти у Кінцевий Автомат), який можна подумати, вимагає цього властивості, тобто ви відчуваєте, що будь-який алгоритм, який його визнає, повинен запам'ятати довільну велику кількість речей (наприклад, у вашому прикладі), то ця мова, ймовірно, не є регулярною.н

Звичайно, завжди слід пам’ятати, що математична інтуїція може помилятися, і єдиний спосіб бути впевненим у своїй інтуїції - це довести її.

EDIT: Я відповім на останнє запитання в коментарях тут, через брак місця.

Ви, хлопці, говорите про необмежену пам’ять, яку ви маєте на увазі, це причина, чому вона не є регулярною. але ^ nb ^ m також може мати необмежену пам'ять, якщо я хочу, чи не так? це все ще не дає мені спокою.

Питання полягає не в тому, наскільки великі слова можуть набути (зазвичай ви стикаєтесь з нескінченними звичайними мовами, оскільки кожна обмежена мова є регулярною, і це досить нудно), а в тому, скільки потрібно пам'ятати DFA.
У прикладі немає потреби згадувати . Алгоріхм просто повинен переконатися, що вони позитивні і що слово впорядковане правильно. Це обмежений список, і кожен із елементів у списку потребує постійної кількості пам'яті. Порівняйте це з , для якого потрібен простий алоритм, щоб пам’ятати, що число 's дорівнює кількостіambnm,н
анбнаб's. Для цього знадобиться необмежена пам'ять. Коли я дивлюся на мову і бачу, що будь-який алгоритм, про який я думаю, потребує необмеженої пам'яті, моя інтуїція про те, що мова не є регулярною, посилюється. Якщо я не можу знайти розумний алгоритм (який потребує постійної кількості пам'яті) за розумну кількість часу (скільки розумного часу залежить від вас), я спробую довести, що мова не є регулярною.
Сподіваюсь, це робить це трохи зрозуміліше.


дякую, математичні докази підносять інтуїцію, але подивіться на це виробниче правило: S -> ab | aSb. це для ^ nb ^ n, який говорить, що він також не є регулярним. але a ^ mb ^ n регулярно з m, n> = 1. чому це? це насправді однакова форма, правда? я не розумію різницю між цими двома мовами
doniyor

1
Для ^ nb ^ n вам потрібно відслідковувати 2 речі: по-перше, що число a дорівнює кількості b (це неможлива частина для DFA), і по-друге, що за жодним 'b' не йде a 'a '. Для ^ mb ^ n вам не байдуже значення m, n. Вас хвилює лише те, що є принаймні одне «a» і хоча б одне «b» і щоб жодне «b» не супроводжувалося «a». Неофіційно кажучи, вам потрібно запам'ятати лише 3 речі.
Борис Трайвас

ой добре, тепер я це зрозумів.
доніор

тож порядок - це також вирішальна річ, правда? як aabbcc прийнято, але не aabcbc лише тому, що замовлення не в порядку. правильно?
доніор

1
"Основна властивість звичайних мов - відсутність необмеженої пам'яті". - Я знаю, що ви маєте на увазі, але це речення не має сенсу. "ви відчуваєте, що будь-який алгоритм, який визнає його, повинен запам'ятати довільну велику кількість речей" - Це справді єдина інтуїція, яку я знаю, але її вид дуже і дуже небезпечний; дивіться тут .
Рафаель

5

Я міг би використовувати насосну лему

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

Хороший спосіб перевірити свою інтуїцію - це перегляд цих мов:

  1. {хууzх,у,z{а,б}+}
  2. {хууzх,у,z{а,б}}
  3. {хууzх,у,z{а,б,c}+}
  4. {хууzх,у,z{а,б,c}}

Які без контексту?


1
Якщо хтось знає подібні приємні приклади для кордону звичайних мов, будь ласка, скажіть так. Будь ласка, не псуйте відповідь у коментарях.
Рафаель

Рафаель - чудова робота! дякую за наведення прикладів та явне тестування мене.
доніор


4

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

Інтуїтивно, коефіцієнт - це те, що вам потрібно для завершення слова після того, як ви вже прочитали частину введення. Більш формально - лівий коефіцієнт мовиL струною x, написана xL - це набір струн w такий як xwL. Наприклад, якщоL={anbn}, тоді aL={an1bn|n1}, поки bL=. Ми легко можемо це побачитиакL={ан-кбн|нк}. Форми є нескінченно багато, тому відразу випливає цеL не є регулярним.

Якщо ми побудуємо DFA D вирішити L, і D буде в штаті S після читання в а, тоді аL - це мова, якою вирішено D змінено, щоб мати стартовий стан S. Ця ж ідея може бути використана для прямої побудови мінімальної DFA, яка визначає звичайну мову з її визначення.


b \ L означає: якщо я поділю L на b, то я отримаю порожній набір ?. це тому, що я насправді повинен почати читати слово з початку? а не ззаду?
доніор

1
бL= тому що в L немає рядків, які починаються з B. Ви можете визначити правильний коефіцієнт L/баналогічно, що відповідає "читання ззаду". Мова також є регулярною, якщо вона має безліч правильних коефіцієнтів, тому що зміна звичайної мови є регулярною. (Це легко показати за допомогою NFA.)
Джеймс Коппель,

1
Ось хороша слайдна колода, яка пояснює коефіцієнти та як будувати з них DFA
Джеймс Коппель,

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