Como mostrar que um idioma regular “invertido” é regular

19

Estou preso na seguinte pergunta:

"Linguagens regulares são precisamente aquelas aceitas por autômatos finitos. Dado esse fato, mostre que se a linguagem é aceita por algum autômato finito, então também é aceita por algum finito; consiste em todas as palavras de invertido. "L R L R LLLRLRL

Gato
fonte
1
Bem, você tentou construir um autômato que aceitaria ? Pode ajudar a desenhar um exemplo. LR
Gilles 'SO- stop be evil'
Obrigado por sua resposta. Não tenho certeza de como fazer isso. Tenho certeza de que qualquer L ^ R seria aceito por algum idioma porque é construído com o mesmo 'alfabeto' e, portanto, também será um idioma comum. Não sei ao certo como provar isso ou como desenhar um exemplo.
Cat
2
Bem-vinda! Para perguntas básicas que parecem tarefas de casa, gostamos que a pergunta contenha trabalho prévio (significativo) do questionador. Você certamente tentou algo que pode compartilhar (que podemos usar para guiá-lo na direção correta). Caso contrário, sugiro que verifique novamente suas definições e siga o conselho de Gilles.
Raphael
3
@ Victoria "é construído com o mesmo 'alfabeto' e também será uma linguagem comum" - oh, nonono. , e são todos definidos no mesmo alfabeto, mas se enquadram em classes de idiomas muito diferentes. { um n b m a n | n , m N } { um n b n um n | n N }{anbmaon,m,oN}{anbmann,mN}{anbnannN}
Raphael
1
A outra pergunta no final do capítulo me pede para provar que nenhum autômato finito pode aceitar todos os palíndromos sobre um determinado alfabeto. Penso que a prova disso depende do fato de que há um número infinito de estados, se considerarmos todos os palíndromos possíveis (sem limite de comprimento), enquanto a máquina é uma máquina de estados finitos.
Cat

Respostas:

26

Portanto, dada uma linguagem regular , sabemos (essencialmente por definição) que ela é aceita por alguns autômatos finitos; portanto, há um conjunto finito de estados com transições apropriadas que nos levam do estado inicial ao estado de aceitação se e somente se a entrada é uma string em . Podemos até insistir que existe apenas um estado de aceitação, para simplificar as coisas. Para aceitar o idioma reverso, tudo o que precisamos fazer é reverter a direção das transições, alterar o estado inicial para um estado de aceitação e o estado de aceitação para o estado inicial. Então nós temos uma máquina que está "atrasada" em comparação com o original e aceita o idioma .L L RLLLR

Luke Mathieson
fonte
Muito obrigado Luke - acho que entendi o que você disse. Você está certo - não tenho absolutamente nenhuma experiência prática com autômatos finitos! Eu votaria em você, mas aparentemente não tenho pontos suficientes. Me desculpe por isso!
Cat
Tudo bem, você deve poder "aceitar" as respostas que desejar (deve haver uma marca de seleção abaixo dos botões de voto). Além disso, a resposta mais formal de Saadtaame é um excelente próximo passo após o meu.
Luke Mathieson
5
Para supor que há apenas um estado de aceitação que tanto deve permitir -transitions, ou ter . Ambos não são restrições reais, eu sei, então a resposta é boa. £ LϵϵL
Hendrik Jan
1
Sim, a ideia parece óbvia para mim. A parte complicada é verificar se está certo.
16267 Ninguém é
24

Você tem que mostrar que você sempre pode construir um autômato finito que aceita cadeias em LR dado um autômato finito que aceita cadeias em L . Aqui está um procedimento para fazer isso.

  1. Inverta todos os links no autômato
  2. Adicione um novo estado (chame-o de qs )
  3. Desenhe um link rotulado com ϵ do estado qs para cada estado final
  4. Transforme todos os estados finais em estados normais
  5. Transforme o estado inicial em um estado final
  6. Tornar qs o estado inicial

Vamos formalizar tudo isso; começamos declarando o teorema.

Teorema. Se L é uma linguagem regular, então é assim LR .

Seja A=(QA,ΣA,δA,qA,FA) seja um NFA e seja L=L(A) . O ϵ -NFA AR definido abaixo aceita a linguagem LR .

  1. AR=(QA{qs},ΣA,δAR,qs,{qA}) eqsQA
  2. pδA(q,a)qδAR(p,a) , ondeaΣA eq,pQA
  3. ϵclosure(qs)=FA

Prova. Primeiro, provamos a seguinte declaração: um caminho de q a p em A rotulado com w se e somente se um caminho de p a q em AR rotulado com wR (o inverso de w ) para q,pQA . A prova é por indução no comprimento de w .

  1. Caso base: |w|=1
    Mantém por definição de δAR
  2. Indução: assuma que a instrução vale para palavras de comprimento <n e deixe |w|=n e w=xa
    Seja pδA(q,w)=δA(q,xa)
    Sabemos que δA(q,xa)=pδA(p,a) pδA(q,x)
    x ea são palavras de menos den símbolos. Por hipótese de indução,pδAR(p,a) eqδAR(p,xR) . Isso implica queqδAR(p,axR)pδA(q,xa) .

Deixando q=qA e p=s para alguns sFA e substituindo wR para axR garantias que qδAR(s,wR) sFA . Como existe um caminho rotulado com ϵ de qs para todos os estados em FA (3. na definição de AR) E um caminho de todos os estados em FA ao estado qA marcado com wR , então existe um caminho marcado com ϵwR=wR de qs para qA . Isso prova o teorema.

Note-se que isto prova que (LR)R=L , bem.

Por favor, edite se houver algum erro de formatação ou falha na minha prova ....

saadtaame
fonte
1
O que você quer dizer com ? ϵclosure(qs)=FA
precisa saber é o seguinte
Mas você não pode ter transição para idiomas regulares determinísticos, pode?
yukashima huksay
@yukashimahuksay É verdade, mas você também pode sempre pegar um autômato finito não determinístico e transformá-lo em um autômato finito determinístico. Eles são equivalentes.
Pro Q
12

Para adicionar às transformações baseada em autômatos descritos acima, você também pode provar que linguagens regulares são fechados sob reversão, mostrando como converter uma expressão regular para em uma expressão regular para L R . Para fazer isso, vamos definir uma função R E V em expressões regulares que aceita como entrada uma expressão regular R em alguma linguagem L , em seguida, produz uma expressão regular R ' para a linguagem L R . Isso é definido indutivamente na estrutura das expressões regulares:LLRREVRLRLR

  1. REV(ϵ)=ϵ
  2. REV()=
  3. para qualquer a ΣREV(a)=aaΣ
  4. REV(R1R2)=REV(R2)REV(R1)
  5. REV(R1|R2)=REV(R1)|REV(R2)
  6. REV(R)=REV(R)
  7. REV((R))=(REV(R))

Você pode provar formalmente essa construção como um exercício correto.

Espero que isto ajude!

templatetypedef
fonte
Oi! Cheguei aqui porque estava pensando na idéia de expressões regulares invertidas, como uma maneira de otimizar uma correspondência ancorada à direita em uma string: alimente os caracteres ao autômato reverso, em ordem inversa. Um passe. Anotei as propriedades algébricas da inversão de expressões regulares e ela corresponde exatamente à sua tabela, mesmo usando a rev()notação. :) Eu também largo REV(R1&R2) = REV(R1)&REV(R2); Eu tenho uma implementação de regex que tem interseção. Sim; Estou pensando em adicionar um operador para reversão, talvez R\r(elemento regex anterior inverso).
Kaz
Aqui está uma questão complicada: qual é a regra algébrica para REV (~ R): negação de regex? REV(~R)é o inverso do conjunto de todas as strings fora de R. É o mesmo que ~REV(R): o conjunto de todas as strings fora do reverso do conjunto indicado por R? Isso não está claro porque todos os palíndromos Rtambém estão REV(R).
Kaz
1

Usando expressões regulares, prove que se é uma linguagem regular, a \ emph {reversão} de L , L R = { w R : w L } também é regular. Em particular, dada uma expressão regular que descreve L , mostrar por indução como convertê-lo em uma expressão regular que descreve L R . Sua prova não deve recorrer aos NFAs. LLLR={wR:wL}LLR

Vamos supor que nos é dada uma expressão regular que descreve . Vamos primeiro olhar para o operador de concatinação ( ) e depois podemos passar para operadores mais avançados. Portanto, nossos casos de concatenação lidam com a duração do que está sendo concatenado. Então, primeiro, quebraremos todas as concatenações de a b para a b . Ao lidar com isso, quebre os componentes o máximo possível: ( a b a ) b ( a b a ) bLabab(aba)b(aba)b, mas você não pode quebrar a ordem associativa entre diferentes compreensões, é claro.

Quando R

Quando , temos a string vazia que já está invertida, portanto o mecanismo não mudas=ϵ

Quando é apenas uma letra, como em s Σ , a reversão é apenas essa letra, sssΣs

Quando , temos um único constituinte, então apenas invertemos esse constituinte e, portanto, σ Rs=σσR

Quando , onde k é impar, que tem uma expressão regular que pode ser escrito como ( σ 0σ 1 . . . Σ k - 1σ k )s=(σ0σ1...σk1σk)(σ0σ1...σk1σk). A reversão dessas seqüências de comprimento par é simples. Simplesmente alterne o índice 0 com o índice k. Em seguida, alterne o índice 1 com o índice k-1. Continue até que cada elemento tenha sido trocado uma vez. Assim, o último elemento agora é o primeiro no reg ex, e o primeiro é o último. O penúltimo é o segundo e o segundo é o penúltimo. Assim, temos um reg ex invertido que aceita a string invertida (a primeira letra é a última etc.) E, é claro, invertemos cada constituinte. Assim que teríamos (σkRσk1R...σ1Rσ0R)

s=(σ0σ1...σk/2...σk1σk)(σ0σ1...σk1σk)(σkRσk1R...σk/2R...σ1Rσ0R)

s1,s2s1s2s1Rs2R

s((sR))

(((ab)(a))((ab)(b)))R((ab)(a))(((ab)(a))R)((ab)(a))R((a)R(ab)R)(a)R(a). Este processo descrito acima descreve uma descrição indutiva dessa alteração.

user2524930
fonte