Gostaria de saber se você pode ser mais específico sobre o problema, ou seja, a última frase da sua pergunta? Recebemos e queremos testar se é máximo? Nossa tarefa é enumerar todos que são máximos? Neste último caso, fica claro que essa lista é de tamanho finito ou polinomial? Provavelmente não faz sentido solicitar um algoritmo para enumerar todas as possibilidades se houver exponencialmente muitas delas. Além disso, você deseja especificar como o idiomaX,Y(X,Y)(X,Y)L é representado quando nos é apresentado e como X,Y são representados? (por exemplo, DFA, NFA, regexp)
DW
2
Eu não entendo seus exemplos. São suposto ser todos os pares máximas? v parece não ser válido ...u,v,wv
Raphael
1
O exemplo é retirado do artigo mencionado acima. deveriam ser pares máximos. Eu também não entendo como v é calculado, uma vez que parece não ser necessariamente em L . Vou postar outro exemplo. u,v,wvL
Laura
1
@ Rafael, parece-me que é válido. Deixando X = Σ * um Σ * , Y = Σ * b Σ * , ( X , Y ) é um fatoração, desde que X ⋅ Y = G (considerar qualquer cadeia que contém um um , então qualquer sequência de um 's e / ou b , então eventualmente a b : essa string deve ter algum ponto onde o primeiro b aparece, de modo que é um ponto em que contém umvX=Σ∗aΣ∗Y= Σ∗b Σ∗( X,Y)X⋅Y=Laabbb ) Eu não tenho uma prova de que é máxima, mas não consigo encontrar qualquer maior conjuntos X ' , Y ' que são uma fatoração de L . abX′,Y′L
DW
Respostas:
8
Conforme sugerido nos comentários da pergunta, tentarei dar uma resposta (infelizmente parcial) à pergunta, pelo menos na medida em que eu mesmo entendi o problema (isso implica que você poderá encontrar erros e se encontrar Para explicar de maneira mais rápida ou clara um dos pontos abaixo, fique à vontade para editar a resposta de acordo):
Primeiro, deve-se notar que, na verdade, não precisamos calcular o autômato universal de uma linguagem se queremos calcular as fatorações de uma linguagem.
A partir do papel mencionado no meu comentário ¹, há uma correspondência 1-1 entre fatores esquerdo e direito de uma linguagem regular, isto é, dado um fator esquerdo da língua, o fator de direito correspondente é determinado e vice-versa exclusivamente. Mais precisamente, nós temos o seguidor:
Deixe que ser um fatoração de L . Então
Y = ⋂ x ∈ X x - 1 L , X = ⋂ y ∈ Y L y - 1 ,
ou seja, qualquer fator esquerdo é uma interseção dos quocientes direitos e qualquer fator direito é uma interseção dos quocientes esquerdos. Por outro lado, qualquer intersecção de quocientes esquerda de L é um fator direito de L , e qualquer intersecção de quocientes direito de L é um fator esquerda de L .(X,Y)L
Y=⋂x∈Xx−1L,X=⋂y∈YLy−1,
LLLL
Observe que, para um idioma comum, existe apenas um conjunto finito de quocientes esquerdo e direito e, portanto, o problema se reduz ao cálculo dos quocientes esquerdo e direito de um idioma e, em seguida, calcula seu fechamento -estável, ou seja, um mínimo superconjunto dos quocientes que são fechados sob interseção. Estes são, então, precisamente os fatores direita e fatores de esquerda, e, em seguida, geralmente é fácil ver quais pares são subconjuntos de L .∩L
Exemplo
Para ilustrar os pontos acima, considere o primeiro exemplo da pergunta (do qual também acho incorreto no artigo):
Vamos . Agora, os quocientes esquerda de L são os conjuntos x - 1 L para x ∈ Σ * , isto é, aquelas palavras u em Σ * que podem ser prefixados com x , ou seja, x u ∈ L . Quando y - 1 L = x - 1 L para x distinto , y ? Este é o caso se e somente se xL=Σ∗abΣ∗Lx−1Lx∈Σ∗uΣ∗xxu∈Ly−1L=x−1Lx,yxe pode ser aumentado para palavras em L com exatamente os mesmos sufixos. Isso significa que, para colocá-lo em termos mais familiares, eles são equivalentes ao Nerode e os sufixos necessários para anexar às palavras em uma classe Nerode são precisamente os respectivos quocientes à esquerda.yL
Para , vemos que nossas classes de equivalência Nerode sãoL
, o conjunto de palavras que não contêm a b como fator e terminam em a , N1aba
, o conjunto de palavras que termina com be não contém a b como fator e N2bab
, o conjunto de palavras que contêm a b como fator, ou seja, N 3 = LN3abN3=L
Eles podem ser aumentados com os seguintes conjuntos (ou seja, esses são os quocientes à esquerda das palavras nas respectivas classes):
para x em N 1 consiste em todas as palavras em L (qualquer palavra pode ser aumentada com uma palavra que contenha a b como fator e assim se torne uma palavra em L ) e b Σ ∗ , que é S 1 = L ∪ b Σ ∗S1=x−1LxN1LabLbΣ∗S1=L∪bΣ∗
para x em N 2 é a própria linguagem, isto é, S 2 = L eS2=x−1LxN2S2=L
para x em N 3 é obviamente Σ ∗ . Isto é, nós encontramos três fatores direita de L . Como S 2 ⊂ S 1 ⊂ S 3 , a sua ∩ fecho -stable é trivialmente S 1 , S 2 , S 3 , e aqueles que são, em seguida, precisamente os factores direita.S3=x−1LxN3Σ∗LS2⊂S1⊂S3∩S1,S2,S3
Portanto, nosso conjunto de fatoração é da forma ( P 1 , S 1 ) , ( P 2 , S 2 ) , ( P 3 , S 3 ) .FL(P1,S1),(P2,S2),(P3,S3)
Agora, para os fatores esquerdos , usamos as equações do início desta resposta:Pi
.
Pi=⋂x∈SiLx−1
Para , este rendimentos G ∪ Σ * um , para P 2 obtemos Σ * e para P 3 , obtém-se L . Você pode ver isso inspecionando (a desculpa mais popular por ser muito preguiçoso para apresentar uma prova formal) ou calculando explicitamente os quocientes certos (o que é bastante análogo, embora não completamente, ao cálculo dos quocientes esquerdos). Nossas fatorações são assim dadas por F L = u , v , w ondeP1L∪Σ∗aP2Σ∗P3LFL=u,v,w
u=(P1,S1)=(Σ∗abΣ∗∪Σ∗a,Σ∗abΣ∗∪bΣ∗)
ev=(P2,S2)=(Σ∗,Σ∗abΣ∗)
w=(P3,S3)=(Σ∗abΣ∗,Σ∗)
Sumário
Para resumir (como você estava solicitando um procedimento simples):
Para computar os fatorações de uma linguagem , em primeiro lugar calcular os quocientes esquerda de L .LL
Você pode fazer isso, no idioma do artigo, construindo um DFA mínimo para L e, em seguida, para cada estado q em A (correspondente, como uma classe de equivalência de Nerode, a um quociente esquerdo), calcule o futuro de q em A , obtendo assim um quociente esquerdo do idioma para cada estado.ALqAqA
A recolha de quocientes deixadas obtidos deste modo os rendimentos, em geral, um subconjunto dos factores direita.SR
Computação, em seguida, o fecho -stable de S R , que pode ser feito na prática pela formação da intersecção de qualquer subconjunto de S R e adicionando qualquer subconjunto obtido desta maneira para S R .∩SRSRSR
O conjunto em conjunto com todas as intersecções da etapa anterior é, em seguida, o conjunto de factores de certas L .SRL
A fim de obter os fatores de esquerda, podemos calcular os quocientes direito de .L
Estes são os conjuntos de forma , para y ∈ Σ * . Agora, estes são novamente apenas finitamente muitos, e para x ≠ y , temos L y - 1 = L x - 1 se e somente se para todos u ∈ Σ ∗ , u x ∈ L ⇔ u y ∈ L , são eles pode ser prefixado para palavras no idioma com exatamente o mesmo conjunto de strings.Ly−1y∈Σ∗x≠yLy−1=Lx−1u∈Σ∗ux∈L⇔uy∈L
Para calcular , considere os estados q em A de modo que x esteja contido no futuro de q . A união do passado desses estados constitui um quociente correto. Encontre todos esses quocientes.Lx−1qAxq
Você sabe que terminou quando encontrou tantos fatores à esquerda quanto os fatores certos.
Encontrar os pares de factores direita para a esquerda e de tal modo que X ⋅ Y ⊆ L . Este é F G .X,YX⋅Y⊆LFL
Respostas:
Conforme sugerido nos comentários da pergunta, tentarei dar uma resposta (infelizmente parcial) à pergunta, pelo menos na medida em que eu mesmo entendi o problema (isso implica que você poderá encontrar erros e se encontrar Para explicar de maneira mais rápida ou clara um dos pontos abaixo, fique à vontade para editar a resposta de acordo):
Primeiro, deve-se notar que, na verdade, não precisamos calcular o autômato universal de uma linguagem se queremos calcular as fatorações de uma linguagem.
A partir do papel mencionado no meu comentário ¹, há uma correspondência 1-1 entre fatores esquerdo e direito de uma linguagem regular, isto é, dado um fator esquerdo da língua, o fator de direito correspondente é determinado e vice-versa exclusivamente. Mais precisamente, nós temos o seguidor:
Deixe que ser um fatoração de L . Então Y = ⋂ x ∈ X x - 1 L , X = ⋂ y ∈ Y L y - 1 , ou seja, qualquer fator esquerdo é uma interseção dos quocientes direitos e qualquer fator direito é uma interseção dos quocientes esquerdos. Por outro lado, qualquer intersecção de quocientes esquerda de L é um fator direito de L , e qualquer intersecção de quocientes direito de L é um fator esquerda de L .(X,Y) L
Observe que, para um idioma comum, existe apenas um conjunto finito de quocientes esquerdo e direito e, portanto, o problema se reduz ao cálculo dos quocientes esquerdo e direito de um idioma e, em seguida, calcula seu fechamento -estável, ou seja, um mínimo superconjunto dos quocientes que são fechados sob interseção. Estes são, então, precisamente os fatores direita e fatores de esquerda, e, em seguida, geralmente é fácil ver quais pares são subconjuntos de L .∩ L
Exemplo
Para ilustrar os pontos acima, considere o primeiro exemplo da pergunta (do qual também acho incorreto no artigo):
Vamos . Agora, os quocientes esquerda de L são os conjuntos x - 1 L para x ∈ Σ * , isto é, aquelas palavras u em Σ * que podem ser prefixados com x , ou seja, x u ∈ L . Quando y - 1 L = x - 1 L para x distinto , y ? Este é o caso se e somente se xL=Σ∗abΣ∗ L x−1L x∈Σ∗ u Σ∗ x xu∈L y−1L=x−1L x,y x e pode ser aumentado para palavras em L com exatamente os mesmos sufixos. Isso significa que, para colocá-lo em termos mais familiares, eles são equivalentes ao Nerode e os sufixos necessários para anexar às palavras em uma classe Nerode são precisamente os respectivos quocientes à esquerda.y L
Para , vemos que nossas classes de equivalência Nerode sãoL
Eles podem ser aumentados com os seguintes conjuntos (ou seja, esses são os quocientes à esquerda das palavras nas respectivas classes):
Portanto, nosso conjunto de fatoração é da forma ( P 1 , S 1 ) , ( P 2 , S 2 ) , ( P 3 , S 3 ) .FL (P1,S1),(P2,S2),(P3,S3)
Agora, para os fatores esquerdos , usamos as equações do início desta resposta:Pi
.
Para , este rendimentos G ∪ Σ * um , para P 2 obtemos Σ * e para P 3 , obtém-se L . Você pode ver isso inspecionando (a desculpa mais popular por ser muito preguiçoso para apresentar uma prova formal) ou calculando explicitamente os quocientes certos (o que é bastante análogo, embora não completamente, ao cálculo dos quocientes esquerdos). Nossas fatorações são assim dadas por F L = u , v , w ondeP1 L∪Σ∗a P2 Σ∗ P3 L FL=u,v,w
Sumário
Para resumir (como você estava solicitando um procedimento simples):
fonte