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 L
Respostas:
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 Reu eu euR
fonte
Você tem que mostrar que você sempre pode construir um autômato finito que aceita cadeias emeuR dado um autômato finito que aceita cadeias em eu . Aqui está um procedimento para fazer isso.
Vamos formalizar tudo isso; começamos declarando o teorema.
Teorema. Seeu é uma linguagem regular, então é assim euR .
SejaA = ( QUMA, ΣUMA, δUMA, qUMA, FUMA) seja um NFA e seja L = L ( A ) . O ϵ -NFA UMAR definido abaixo aceita a linguagem euR .
Prova. Primeiro, provamos a seguinte declaração:∃ um caminho de q a p em UMA rotulado com W se e somente se ∃ um caminho de p a q em UMAR rotulado com WR (o inverso de W ) para q, p ∈ QUMA . A prova é por indução no comprimento de W .
Mantém por definição de
Seja
Sabemos que
Deixandoq=qA e p=s para alguns s∈FA e substituindo wR para axR garantias que q∈δ∗AR(s,wR) ∀s∈FA . 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 ....
fonte
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:L LR REV R L R′ LR
Você pode provar formalmente essa construção como um exercício correto.
Espero que isto ajude!
fonte
rev()
notação. :) Eu também largoREV(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, talvezR\r
(elemento regex anterior inverso).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índromosR
também estãoREV(R)
.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.L L LR={wR:w∈L} L LR
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 ) ∘ bL ∘ ab a∘b (ab∪a)b→(ab∪a)∘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, ss s∈Σ 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...σk−1σk) (σ0∘σ1...σk−1∘σ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 (σRkσRk−1...σR1σR0)
fonte