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