Ви чуєте той шум ? Це звук тисячі геніальних теорем, застосувань та інструментів, що сміються на небесах автомати-теоретики.
Мови та автомати - це елегантні та надійні концепції, які ви знайдете у кожній галузі інформатики. Мови не сухі, формалістичні передачі рук від обчислювальної доісторії. Перспектива теорії мови відокремлює, здавалося б, складні питання про складні, непрозорі предмети на прості висловлювання про слова та дерева. Формальні мови відіграють певну роль у інформатиці, подібній фундаментальній та ігровій точці зору, яку алгебра та топологія піднесли до класичної математики. Ось декілька практичних, досить складних, практичних проблем, до яких звертається через мовну теорію.
- Ви хочете помітити у документі повторювані випадки фрази та видалити друге виникнення. По суті, ви хочете замінити послідовність мовою.
- Чи містить програма порушення твердження? Чи поважає драйвер пристрою певні протоколи під час взаємодії з ядром? Поведінка програми - це сукупність виконань; Іншими словами, мова. Властивість правильності - інша мова. Проблема коректності програми становить перевірку мовної включеності.
- Чи може ваше програмне забезпечення застрягти в нескінченному циклі? Чи містить алгоритм розподіленого алфавіту? Нам потрібні мови над нескінченними словами, але погляд на включення мови все ще діє.
- Ви хочете створити дезінфікуючий засіб для виявлення шкідливого Javascript, що вводиться у веб-додаток. Набір шкідливих рядків - це мова. Набір рядків, введених у форми іншою мовою. Ви хочете визначити, чи перетин цих мов не порожній.
- Моніторинг робочого часу реактивних та критично важливих систем. Ви хочете розробити програмний монітор, який контролює роботу хімічного процесу або відстежує оновлення фінансової бази даних. Це проблеми, пов'язані з включенням мови та перетином мови.
- Розпізнавання візерунків за допомогою численних застосувань. Ви хочете виявити закономірності в геномних даних, у тексті, у ряді звітів про помилки. Це проблеми, коли нам дають слова з невідомої мови і доводиться відгадувати мову. Це проблеми з виведенням мови.
- Враховуючи набір документів XML, ви хочете повернути інженеру схему, яка застосовується до цих документів. XML-документи можна ідеалізувати деревами. Потім схема - це специфікація дерева дерева, а проблема висновку схеми - проблема виводу мови для дерев.
- Багато додатків вимагають автоматизованих арифметичних міркувань. Припустимо, ми зафіксували таку логічну теорію, як арифметика Пребургера, в якій ми маємо натуральні числа, додавання та менший ніж присудок. Формула з n змінними представляє набір n-мірних векторів. Вектор - це послідовність цифр і може бути закодована у вигляді слова. Присудок - це сукупність слів; мова. Логічні операції, такі як сполучення, диз'юнкція та заперечення, стають перетином, об'єднанням та доповненням мов (екзистенціальна кількісна оцінка - це свого роду проекція).
Зниження, натякане на вище, розглядає мови як абстрактні математичні об'єкти. Щоб застосувати ці ідеї на практиці, нам потрібна структура даних, яка представляє мови та алгоритми для управління цими структурами даних.
Введіть автомати. Автомати дозволяють зводити питання про абстрактні математичні об'єкти, такі як мови, до конкретних, алгоритмічні запитання щодо мічених графіків. Теорія мов та автоматів, окрім шаленої кількості практичних застосувань, надає дуже важливу інтелектуальну послугу. Ми можемо думати про проблеми, починаючи від форматування поштових індексів і закінчуючи процедурами прийняття рішень для монадичної логіки другого порядку в єдиному і неспокійному концептуальному просторі. Як це дивно!
Я нічого не говорив про логіку та процедури прийняття рішень. (Так, вони мають практичне застосування.) Дивіться відповідь Kaveh для авторитетного огляду.