Клини замыкание для бесконечного подмножества

Пусть L = {an | n> = 0}, где а также для всех n >= 1.

Таким образом, L состоит из последовательностей любой длины, включая последовательность длины 0. Пусть L2 - любое бесконечное подмножество L. Мне нужно показать, что всегда существует DFA для распознавания (L2)*.

Если L2 - конечное подмножество, это очень очевидно, так как L2 будет DFA и, следовательно, по клине замыкания L2* будет распознан DFA. Но я не могу получить его для бесконечного подмножества, так как L2 не может быть выражен как DFA, например, длина строк проста.

1 ответ

Подход

Хотя существует DFA для описания множества L всех строк a n, n> = 0, нет гарантии, что DFA существует для всех подмножеств L. Подмножество L, которое содержит все строки, длина которых проста, как вы упомянул, является одним из примеров, где DFA описывает язык не существует.

Правильный подход заключается в прямом доказательстве того, что (L')* является регулярным языком для любого подмножества L' в L.

Определение

Определим GCD(K) = GCD w ∈ K, | w | > 0 (| w |), где K - любое непустое подмножество в L. Теперь мы можем ссылаться на наибольший общий делитель всех длин всех непустых слов в языке K как GCD(K). Это определение применимо как к конечному, так и к бесконечному подмножеству L.

Аналогично можно определить LCM (K) = LCM w ∈ K, | w | > 0 (| w |), где K - любое непустое и конечное подмножество в L.

доказательство

Мы попытаемся доказать, что когда GCD(L') = 1, существует такое число M, что вся строка a n, n> = M принадлежит языку (L')*. Это приводит к тому, что (L')* является регулярным языком, поскольку мы можем построить регулярное выражение в форме:

Все строки длиной меньше М и принадлежат (L')*
ИЛИ ЖЕ
Все строки длиной больше или равны M

Приведенное выше регулярное выражение имеет соответствующий DFA с M + 1 состояниями.

Когда GCD(L') > 1, мы можем свести проблему к случаю GCD = 1, "разделив" все слова в подмножестве L' на GCD(L').


Если GCD(L') = 1 (взаимно простое множество), существует конечное подмножество S в L', где GCD длины всех строк в S также равен 1.

Мы можем доказать вышеизложенное утверждение конструкцией.

  • Выберите любой элемент w 1 из L ', | w 1 | > 0 и построить множество S 1 = {w 1 }
  • Если GCD(S n) = 1, S n - это множество, которое мы хотим найти.
  • Если GCD(S n)> 1, выбрать элемент w n + 1 из L 'и построить множество S n + 1 = {w n + 1 } ∪ S n, так что
    GCD(S n + 1) n)

Если GCD(S n)> 1, всегда существует элемент из множества L ', который уменьшает GCD, когда мы добавляем его в набор; в противном случае GCD множества L 'не может быть 1. А поскольку длина первого элемента w 1 имеет конечное число факторов, размер конечного множества S конечен.

Возвращаясь к задаче, для любого подмножества L 'в L мы можем найти конечное подмножество S в L', которое удовлетворяет GCD(L ') = GCD(S). Из множества S мы можем построить обобщенное линейное диофантово уравнение с |S| неизвестные а я:

a 1 | w 1 | + a 2 | w 2 | +... + a |S| | w |S| | = c, где c - неотрицательное целое число

Поскольку GCD(S) = 1, приведенное выше уравнение всегда разрешимо, рекурсивно применяя решение к простейшей форме линейного диофантова уравнения ax + by = c.

Решите приведенные выше обобщенные диофантовы уравнения для c = 0 до (LCM(S) - 1). Решения (a 1, a 2,..., a |S|) могут содержать отрицательные числа. Однако мы можем продолжать добавлять кратные значения LCM (S) к обеим сторонам уравнений, пока все решения не содержат только неотрицательные числа.

Пусть k будет наименьшим кратным LCM (S), так что все диофантовы уравнения для c = k * LCM(S) + q, q = 0 до (LCM (S) - 1) имеют неотрицательное решение. Тогда мы можем определить M как k * LCM(S), поскольку любые строки, длина которых больше, чем M, могут быть разложены как объединение слов в S (таким образом, в L ').

Пример расчета на основе доказательства

Предположим, что L '- множество всех строк в L, длина которых проста.

Построим множество S = {a 2, a 5 }. S может быть {a 2, a 19 } или {a 5, a 23 }, на самом деле не имеет значения. Конечное значение M может быть другим, но это не влияет на тот факт, что (L')* является обычным языком.

Нам нужно решить 10 уравнений (отдельно):

2a 1 + 5a 2 = 0 => (a 1, a 2) = (0, 0)
2a 1 + 5a 2 = 1 => (a 1, a 2) = (3, -1)
2a 1 + 5a 2 = 2 => (a 1, a 2) = (1, 0)
2a 1 + 5a 2 = 3 => (a 1, a 2) = (-1, 1)
2a 1 + 5a 2 = 4 => (a 1, a 2) = (2, 0)
2a 1 + 5a 2 = 5 => (a 1, a 2) = (0, 1)
2a 1 + 5a 2 = 6 => (a 1, a 2) = (3, 0)
2a 1 + 5a 2 = 7 => (a 1, a 2) = (1, 1)
2a 1 + 5a 2 = 8 => (a 1, a 2) = (4, 0)
2a 1 + 5a 2 = 9 => (a 1, a 2) = (2, 1)

Добавьте один LCM(2,5) = 10. Обратите внимание, что мы можем изменить решение напрямую, без повторного решения, благодаря свойству LCM:

2a 1 + (5a 2 + 10) = 1 + 10 => (a 1, a 2) = (3, 1)
(2a 1 + 10) + 5a 2 = 3 + 10 => (a 1, a 2) = (4, 1)

Поскольку все решения неотрицательны, и мы добавляем только один LCM(2,5), M = 10.

Регулярное выражение для (L')* может быть построено:

a 2 + a 4 + a 5 + a 6 + a 7 + a 8 + a 9 + a 10 a *

Регулярное выражение не очень компактно, но это не наша задача. Для доказательства нам нужно только знать, что существует число M, так что a n принадлежит (L')* для всех n >= M, из чего следует, что существует конечное число состояний и можно построить DFA.,

Другие вопросы по тегам