Чи може регулярний вираз бути нескінченним?


10

Я знаю, що мови, які можна визначити за допомогою регулярних виразів та тих, які можна розпізнати за допомогою DFA / NFA (кінцеві автомати), є рівнозначними. Також для мови не існує DFA{0n1n|n0}. Але все-таки це можна записати, використовуючи регулярні вирази (з цього приводу будь-яка нерегулярна мова може бути) як{ϵ}{01}{0011}....... Але ми знаємо, що кожна мова, яка має регулярний вираз, має DFA, який розпізнає її (суперечить моєму попередньому твердженню). Я знаю, що це тривіальна річ, але чи включає визначення регулярного вираження умову, що воно має бути кінцевим?


3
Ви вже відповіли на власне запитання: якщо REG CFL, такі терміни не можуть бути регулярними виразами.
Рафаель

1
Лише бічна примітка: якщо ми скасуємо вимогу DFA / NFA як кінцеву, ми можемо побудувати автомат, щоб прийняти . {0н1нн0}

3
В якості термінології слово "автомати" є множиною "автомати". Немає слова "автомати" - ви не можете зробити його більш множинним, ніж це є. (Автомати правильні як присвійні, але не як множина)
chasly з Великобританії

Відповіді:


23

Якби регулярні вирази дозволялися нескінченними, то будь-яка мова була б регулярною.

З огляду на мову , ми завжди можемо визначити регулярний вираз , який точно визначає . (Приклад: регулярний вираз визначає .)L={ш1,ш2,}R=ш1+ш2+L
R1=ϵ+0+1+00+01+10+11+L1={0,1}

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


5
Мені подобається ця відповідь, тому що вона не тільки говорить про те, що нескінченні регулярні вирази різні, але й поняття в цілому не має сенсу.
jmite

Більш короткий виклад моменту, який я поховав у своєму другому абзаці, і тому ясніший.
Девіслор

Але це дійсно завершується чистою тавтологією. Чому б тоді ми не вважали всі мови регулярними, якщо вони мають цю форму? Те, що ми робимо з реджексами, більше не працює. Ми не можемо побудувати машину стану за допомогою індуктивного алгоритму, оскільки вона ніколи не закінчується і має нескінченні стани. Ми не можемо порівнювати з усім списком і відхиляти, якщо нічого не відповідає. І ми фізично не можемо представити список. (Списки, які ми можемо генерувати за допомогою комп’ютера, є вирішальними мовами.) Ми можемо довести матеріали, використовуючи той факт, що кожна мова має цю форму, але не той тип речей, який ми знаємо про регулярні вирази.
Девіслор

@jmite "не має сенсу" чи особливий випадок?
БАР

@BAR Не має сенсу, як у класі мови Σ описані нескінченними регулярними виразами справедливі 2Σтобто сукупність усіх мов. Ми не отримуємо класу мов так, як ви робите з кінцевими RE, CFG або навіть машинами Turing.
jmite

5

Так, це має бути кінцевим. Уявіть, у вас є безмежний набір можливих збігів, і ваш внесок є 011. Чи змогли б ви коли-небудь відхилити це? Чи хотіли б ви коли-небудь закінчити сірники для перевірки?

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

Тепер, якби у вас була програма, яка перелічувала рядки мовою в лексикографічному порядку -

Оновлення

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

Чому ми таким чином визначаємо "звичайну" мову? Оскільки кожна формальна мова - це підмножина рядків алфавіту, і кожен набір рядків може бути виражений як об'єднання одинаків, тому, якщо ми називали будь-який набір рядків "регулярною" мовою, звичайна мова була б просто синонімом мови . Це не дуже корисне визначення, тим більше, що ми не можемо реально реалізувати його в апаратному чи програмному забезпеченні. Ми не можемо зберігати довільний нескінченний список ніде і не будувати машину нескінченного стану.

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


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

@Raphael: Будь ласка, врахуйте наслідки вашого твердження, " кожна рішима мова має представлення форми, яку пропонує Саша!" Це, власне, те, що я робив у своїй відповіді. Питання було, чи всі мови цієї форми визначені як регулярні? Ну, чи кожна рішима мова є регулярною? (І, як я показав, деякі невирішені теж?) Це було б корисним визначенням "регулярно?"
Девіслор

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

0

Припустимо, регулярні вирази дозволялися нескінченними.

Таким чином, мова, визначена {ϵ} ∪ {01} ∪ {0011} ..., буде регулярною. Для кожної звичайної мови існує NFA. Одним із способів отримати цю NFA буде мати індивідуальні NFA для кожного з {ϵ}, {01}, {0011} ... та поєднувати їх за допомогою ϵ переходів. Оскільки є нескінченно чіткі регулярні вирази, нам знадобляться нескінченні суб-NFA, щоб їх поєднувати. Однак NFA може мати лише обмежену кількість станів (визначення NFA).

Таким чином, не існує NFA, який би міг визначити мову, визначену об'єднанням нескінченних регулярних виразів, що означає, що мова не є регулярною.

Таким чином, немає регулярного вираження, яке може визначати ту саму мову, що і мова, визначену об'єднанням нескінченних регулярних виразів.

Таким чином, регулярні вирази можуть мати лише кінцеві вирази.


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