Существует ли алгоритм / систематическая процедура для проверки правильности языка?
Другими словами, учитывая язык , заданный в алгебраической форме (думаю , что - то вроде ), проверить , является ли регулярным или не язык. Представьте, что мы пишем веб-сервис, чтобы помочь студентам со всеми домашними заданиями; пользователь указывает язык, а веб-служба отвечает «обычный», «не обычный» или «я не знаю». (Мы бы хотели, чтобы веб-сервис отвечал «я не знаю» как можно реже.) Есть ли хороший подход к автоматизации этого? Является ли это послушный? Разрешаемо ли это (т. Е. Возможно ли гарантировать, что нам никогда не нужно отвечать «я не знаю»)? Существует достаточно эффективные алгоритмы для решения этой проблемы, и быть в состоянии дать ответ, кроме «не знает»
Классический метод для доказательства того, что язык не является правильным является накачка леммы. Тем не менее, похоже, что в какой-то момент требуется понимание вручную (например, чтобы выбрать слово для прокачки), поэтому мне не ясно, можно ли это превратить в нечто алгоритмическое.
Классический метод доказательства регулярности языка заключается в использовании теоремы Майхилла – Нерода для получения автомата конечного состояния. Это выглядит как многообещающий подход, но он требует умения выполнять основные операции на языках в алгебраической форме. Мне не ясно, существует ли систематический способ символически выполнять все необходимые операции над языками в алгебраической форме.
Чтобы сделать этот вопрос корректным, нам нужно решить, как пользователь будет указывать язык. Я открыт для предложений, но я имею в виду что-то вроде этого:
где - это слово-выражение, а - система линейных неравенств по переменным длины со следующими определениями:S
Каждый из является словом-выражением. (Они представляют переменные, которые могут принимать любое слово в .)Σ ∗
Каждое из является словом-выражением. (Здесь представляет обратную строку .)х г х
Каждое из является словом-выражением. (Неявно, , поэтому представляют один символ в основном алфавите.)Σ = { , Ь , с , ... } , б , с , ...
Каждое из является выражением слова, если является переменной длины.η
Конкатенация слов-выражений является словом-выражением.
Каждый из является переменной длины. (Они представляют переменные, которые могут принимать любое натуральное число.)
Каждый из является переменной длины. (Они представляют длину соответствующего слова.)
Это кажется достаточно широким, чтобы охватить многие случаи, которые мы видим в упражнениях из учебника. Конечно, вы можете заменить любой другой текстовый метод указания языка в алгебраической форме, если у вас есть лучшее предложение.