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