Как предлагается в комментариях к вопросу, я постараюсь дать (к сожалению, частичный) ответ на вопрос, по крайней мере, в той степени, в которой я сам понял проблему (это подразумевает, что вы вполне можете найти ошибки, и если вы найдете способ более кратко или ясно объяснить один из следующих пунктов, не стесняйтесь редактировать ответ соответственно):
Во-первых, следует отметить, что на самом деле нам не нужно вычислять универсальный автомат языка, если мы хотим вычислить факторизации языка.
Из статьи, упомянутой в моем комментарии ¹, есть соответствие 1-1 между левым и правым факторами обычного языка, то есть, учитывая левый фактор языка, соответствующий правый фактор определяется однозначно, и наоборот. Точнее, имеем следующее:
Пусть ( X , Y ) является факторизация L . Тогда
Y = ⋂ x ∈ X x - 1 L , X = ⋂ y ∈ Y L y - 1 ,
то есть любой левый фактор является пересечением правых отношений, а любой правый фактор - пересечением левых отношений. И наоборот, любое пересечение левых частного L является правым фактором L , и любое пересечение правого частного L является левым фактором L .(X,Y)L
Y=⋂x∈Xx−1L,X=⋂y∈YLy−1,
LLLL
Обратите внимание, что для обычного языка существует только конечный набор левого и правого факторов, и, следовательно, или проблема сводится к вычислению левого и правого факторов языка, а затем к вычислению их ∩- стабильного замыкания, то есть минимального надмножество частных, замкнутое при пересечении. Они тогда точно правые и левые факторы факторы, а затем, как правило , легко увидеть , какие пары являются подмножества L .∩L
пример
Чтобы проиллюстрировать вышеуказанные моменты, рассмотрим первый пример в вопросе (о котором я также думаю, что он неверен в статье):
Пусть L = Σ ∗ a b Σ ∗ . Теперь, левый факторгруппы L являются множества х - 1 л для х ∈ Е * , то есть те слова U в Е * , что может быть с префиксом х , т.е. х у ∈ L . Когда y - 1 L = x - 1 L для различных x , y ? Это имеет место тогда и только тогда, когда хL=Σ∗abΣ∗Lx−1Lx∈Σ∗uΣ∗xxu∈Ly−1L=x−1Lx,yxи y можно дополнить словами в L с точно такими же суффиксами. Это означает, что, если говорить более привычно, они эквивалентны Nerode, а суффиксы, необходимые для добавления слов в класс Nerode, являются именно соответствующими левыми частными.yL
Для L мы видим, что наши классы Nerode-эквивалентностиL
- N 1 , набор слов, не содержащий a b как фактор и заканчивающийся на a , N1aba
- N 2 - набор слов, оканчивающийся на b и не содержащий a b как фактор, и N2bab
- N 3 , набор слов, содержащий a b как фактор, то есть N 3 = LN3abN3=L
Они могут быть дополнены следующими наборами (то есть, это левые коэффициенты слов в соответствующих классах):
- S 1 = x - 1 L для x в N 1 состоит из всех слов в L (любое слово может быть дополнено словом, содержащим a b в качестве фактора и, таким образом, становится словом в L ) и b Σ ∗ , то есть S 1 = L ∪ b Σ ∗S1=x−1LxN1LabLbΣ∗S1=L∪bΣ∗
- S 2 = x - 1 L для x в N 2 - это сам язык, то есть S 2 = L иS2=x−1LxN2S2=L
- S 3 = x - 1 L для x в N 3 , очевидно, Σ ∗ . То есть, мы нашли три правильных факторы L . Поскольку S 2 ⊂ S 1 ⊂ S 3 , их ∩- стабильное замыкание тривиально S 1 , S 2 , S 3 , и тогда они являются точно правильными факторами.S3=x−1LxN3Σ∗LS2⊂S1⊂S3∩S1,S2,S3
Следовательно, наш набор факторизации F L имеет вид ( P 1 , S 1 ) , ( P 2 , S 2 ) , ( P 3 , S 3 ) .FL(P1,S1),(P2,S2),(P3,S3)
Теперь для левых факторов P i используем уравнения начала этого ответа:Pi
P i = ⋂ x ∈ S i L x - 1 .
Pi=⋂x∈SiLx−1
Для Р 1 , это дает L ∪ Е * , для P 2 мы получаем Е * и P 3 , получаем L . Вы можете убедиться в этом по проверке (наиболее популярное оправдание за то, что слишком ленив, чтобы сформулировать формальное доказательство) или по явному вычислению правильных отношений (что довольно аналогично, хотя и не полностью, вычислению левых отношений). Таким образом, наши факторизации определяются как F L = u , v , w, гдеP1L∪Σ∗aP2Σ∗P3LFL=u,v,w
- u = ( P 1 , S 1 ) = ( Σ ∗ a b Σ ∗ ∪ Σ ∗ a , Σ ∗ a b Σ ∗ ∪ b Σ ∗ )u=(P1,S1)=(Σ∗abΣ∗∪Σ∗a,Σ∗abΣ∗∪bΣ∗)
- v = ( P 2 , S 2 ) = ( Σ ∗ , Σ ∗ a b Σ ∗ ) иv=(P2,S2)=(Σ∗,Σ∗abΣ∗)
- w = ( P 3 , S 3 ) = ( Σ ∗ a b Σ ∗ , Σ ∗ )w=(P3,S3)=(Σ∗abΣ∗,Σ∗)
Резюме
Подводя итог (как вы просили для простой процедуры):
- Для вычисления факторизации языка L , сначала вычислить левую факторизацию L .LL
- Вы можете сделать это на языке статьи, построив минимальный DFA A для L, а затем для каждого состояния q в A (соответствующего, как класс эквивалентности Nerode, левому частному) вычислить будущее q в A получая, таким образом, один левый коэффициент языка для каждого состояния.ALqAqA
- Полученный таким образом набор левых отношений дает, как правило, подмножество S R правых факторов.SR
- Вычислительное то ∩ -stable замыкания S R , который может быть реализован на практике путем формирования пересечения любого подмножества S R и добавления какого - либо подмножества , полученное таким образом , к S R .∩SRSRSR
- Множество S R вместе со всеми пересечениями из предыдущего шага , то множество правых факторов L .SRL
- Для того , чтобы получить левые факторы, мы можем вычислить правильную факторизацию L .L
- Это множества вида L y - 1 для y ∈ Σ ∗ . Теперь их снова только конечное число, и для x ≠ y мы имеем L y - 1 = L x - 1 тогда и только тогда, когда для всех u ∈ Σ ∗ , u x ∈ L ⇔ u y ∈ L , то есть они может иметь префикс к словам в языке с точно таким же набором строк.Ly−1y∈Σ∗x≠yLy−1=Lx−1u∈Σ∗ux∈L⇔uy∈L
- Чтобы вычислить L x - 1 , рассмотрим те состояния q в A , что x содержится в будущем q . Союз прошлого тех государств составляет один правильный коэффициент. Найдите все эти коэффициенты.Lx−1qAxq
- Вы знаете, что вы сделали, когда вы нашли столько левых факторов, сколько у вас есть правильных факторов.
- Найти такие пары левого и правого факторов X , Y такое , что X ⋅ Y ⊆ L . Это F L .X,YX⋅Y⊆LFL
- Универсальный автомат Ломбардии и Сакаровича (в « Текстах в логике и играх», том 2: Логика и автоматы: история и перспективы , 2007)