Профессор Снэйп
вы не могли бы написать чуть подробней ваше доказательство?
У меня не совсем получается его восстановить по вашему очерку.
Оно у меня в голове вертелось, я на бумагу не пытался его записывать. Боюсь, что если начать это делать, то там вылезут многочисленные сложности...
Одна из идей, упрощающих доказательство, была такая. Если
--- регулярный язык, то
, где для любого
от
до
длины слов из языка
образуют арифметическую прогрессию. Далее, конкатенация с объединением подчиняются свойству дистрибутивности. И ещё: если
регулярен, то
регулярен для любого
. Так что случай конкатенации можно свести к конкатенации языков, длины слов каждого из которых образуют одну арифметическую прогрессию.
Ну а дальше уже начинаются разные кропотливые сложности, которые я до конца не расписывал. Возможно, там всякая дрянь навылазит, если расписывать начать. Надо садиться с листом бумаги за стол и конкретно думать, мне лень (нет времени).
Кстати, почему именно с конкатенацией сложности? Звёздочка Клини, как мне кажется, ничуть не проще.
Там вон выше
Xaositect построил автомат в явном виде, лучше с ним поразбираться сначала
Может, и не нужны будут все эти мои заморочки
Кстати, используя нетривиальный факт о том, что множество регулярных языков совпадает с множеством языков, распознаваемых на одноленточной машине Тьюринга за линейное время, задача решается достаточно просто, достаточно построить эту линейную МТ.
Вот это мне самому очень интересно. Как её строить, такую линейную МТ? Если к данному слову дописывать по очереди все слова такой же длины и проверять для каждой конкатенации принадлежность исходному языку, то тут даже полиномиальной сложности не будет, не то что линейной
Вот, кстати, факт: если язык
регулярен, то язык
уже может быть не регулярным (пример --- язык, задаваемый регулярным выражением
). То есть если просто искать половинки слов и проверять (за линейное время) их принадлежность языку
, то линейность теряется. То есть половинка слова просто так за линейное время не находится. А то, что Вы собрались за линейное время делать, выглядит гораздо сложнее!!!
-- Ср окт 07, 2009 09:11:33 --Неформально: вместе с состоянием исходного автомата храним функцию, которая говорит, до каких состояний можно добраться из данного за количество шагов, равное уже сделанному.
А как Вы можете знать, какое количество шагов уже сделано? В автоматах, знаете ли, циклы разные бывают. Pumping lemma опять же
Хотя в формальную конструкцию пока не вникал. Может, оно всё и нормально там...
-- Ср окт 07, 2009 09:24:30 --Ага! Прочитал формальную конструкцию. Вроде понял, вроде всё правильно
Там подправьте, кстати, кое-где. У Вас функция
то одноместная, то двухместная: в разных местах по разному