Cómo demostrar que un lenguaje regular "invertido" es regular

19

Estoy atrapado en la siguiente pregunta:

"Los lenguajes regulares son precisamente los aceptados por autómatas finitos. Dado este hecho, demuestre que si el lenguaje es aceptado por algún autómata finito, entonces también es aceptado por algún finito; consiste en todas las palabras de invertido ".LLRLRL

Gato
fuente
1
Bueno, ¿intentaste construir un autómata que aceptara ? Puede ayudar dibujar un ejemplo. LR
Gilles 'SO- deja de ser malo'
Gracias por su respuesta. No estoy seguro de cómo hacer esto. Estoy seguro de que cualquier L ^ R sería aceptado por algún idioma porque está construido con el mismo 'alfabeto' y, por lo tanto, también será un idioma normal. Sin embargo, no estoy seguro de cómo probarlo, o cómo dibujar un ejemplo.
Gato
2
¡Bienvenido! Para preguntas tan básicas que parecen tareas de tarea, nos gusta si la pregunta contiene trabajo previo (significativo) del interrogador. Ciertamente ha intentado algo que puede compartir (que luego podemos usar para guiarlo en la dirección correcta). Si no, le sugiero que vuelva a verificar sus definiciones y preste atención al consejo de Gilles.
Raphael
3
@Victoria "está construido con el mismo 'alfabeto' y, por lo tanto, también será un lenguaje normal" - oh, nonono. , y se definen sobre el mismo alfabeto pero se dividen en clases de idiomas muy diferentes. { a n b m a nn , m N } { a n b n a nn N }{anbmaon,m,oN}{anbmann,mN}{anbnannN}
Raphael
1
La otra pregunta al final del capítulo me pide que pruebe que ningún autómata finito puede aceptar todos los palíndromos sobre un alfabeto dado. Creo que la prueba de esto depende del hecho de que hay un número infinito de estados si estamos considerando todos los palíndromos posibles (sin límite de longitud), mientras que la máquina es una máquina de estados finitos.
Gato

Respuestas:

26

Entonces, dado un lenguaje regular , sabemos (esencialmente por definición) que es aceptado por algunos autómatas finitos, por lo que hay un conjunto finito de estados con transiciones apropiadas que nos llevan del estado inicial al estado de aceptación si y solo si la entrada es una cadena en . Incluso podemos insistir en que solo hay un estado de aceptación, para simplificar las cosas. Para aceptar el lenguaje inverso, todo lo que tenemos que hacer es invertir la dirección de las transiciones, cambiar el estado de inicio a un estado de aceptación y el estado de aceptación al estado de inicio. Luego tenemos una máquina que está "al revés" en comparación con el original, y acepta el lenguaje .L L RLLLR

Luke Mathieson
fuente
Muchas gracias Luke. Creo que entiendo lo que has dicho. Estás en lo cierto: ¡no tengo absolutamente ninguna experiencia práctica con autómatas finitos! Te 'votaría' pero no tengo suficientes puntos, aparentemente. ¡Lo siento por eso!
Gato
Está bien, debe poder "aceptar" las respuestas que desee (debe haber una marca de verificación debajo de los botones de votación). También la respuesta más formal de Saadtaame es un excelente próximo paso después del mío.
Luke Mathieson
55
Asumir que sólo hay un estado de aceptación o nos debemos permitir -transitions, o han . Ambas no son restricciones reales, lo sé, así que la respuesta está bien. ϵ LϵϵL
Hendrik Jan
1
Sí, la idea me parece obvia. La parte difícil es verificar que es correcto.
Nadie
24

Usted tiene que demostrar que siempre se puede construir un autómata finito que acepta cadenas en dado un autómata finito que acepta cadenas en . Aquí hay un procedimiento para hacer eso.LRL

  1. Invierta todos los enlaces en el autómata
  2. Agregar un nuevo estado ( )qs
  3. Dibuje un enlace etiquetado con desde el estado hasta cada estado finalϵqs
  4. Convierta todos los estados finales en estados normales
  5. Convertir el estado inicial en un estado final
  6. Haga el estado inicialqs

Formalicemos todo esto; comenzamos declarando el teorema.

Teorema. Si es un lenguaje regular, entonces también lo es .LLR

Sea ser un NFA y sea . El -NFA definido a continuación acepta el idioma .A=(QA,ΣA,δA,qA,FA)L=L(A)ϵARLR

  1. AR=(QA{qs},ΣA,δAR,qs,{qA}) yqsQA
  2. pagδUN(q,un)qδUNR(pag,un)a Σ A q , p Q A , donde yunΣUNq,pagQUN
  3. ϵclosure(qs)=FA

Prueba. Primero, demostramos la siguiente afirmación: una ruta de a en etiquetada con si y solo si una ruta de a en etiquetada con (el reverso de ) para . La prueba es por inducción en la longitud de .qpAwpqARwRwq,pQAw

  1. Caso base: Retenciones por definición de|w|=1δ A R
    δAR
  2. Inducción: suponga que el enunciado se cumple para palabras de longitud y let y Let Sabemos que y son palabras de menos de símbolos. Según la hipótesis de inducción, y . Esto implica que .<n|w|=nw=xap δ A ( q , w ) = δ A ( q , x a ) δ A ( q , x a ) = p δ A ( p , a ) p δ A ( q
    pδA(q,w)=δA(q,xa)
    δA(q,xa)=pδA(p,a) pδA(q,x)
    xanpδAR(p,a)qδAR(p,xR)qδAR(p,axR)pδA(q,xa)

Dejar y para algunos y sustituir por garantiza que . Como hay una ruta etiquetada con de a cada estado en (3. en la definición de ) y una ruta desde cada estado en al estado etiquetada con , entonces hay una ruta etiquetado con de a . Esto prueba el teorema.q=qAp=ssFAwRaxRqδAR(s,wR) sFAϵqsFAARFAqAwRϵwR=wRqsqA

Tenga en cuenta que esto prueba que también.(LR)R=L

Edite si hay algún error de formato o alguna falla en mi prueba ...

saadtaame
fuente
1
¿Qué quiere decir con ? ϵclosure(qs)=FA
user124384
Pero no puedes tener ϵ transición en lenguajes deterministas regulares ¿verdad?
yukashima huksay
@yukashimahuksay Cierto, pero también puedes tomar un autómata finito no determinista y convertirlo en un autómata finito determinista. Son equivalentes
Pro Q
12

Para añadir a las transformaciones basadas en autómatas descritos anteriormente, también se puede demostrar que los lenguajes regulares son cerrados bajo la inversión, mostrando cómo convertir una expresión regular para en una expresión regular para L R . Para ello, vamos a definir una función R E V en expresiones regulares que acepta como entrada una expresión regular R por lenguaje L , después produce una expresión regular R ' para el lenguaje L R . Esto se define inductivamente en la estructura de las expresiones regulares:LLRREVRLRLR

  1. REV(ϵ)=ϵ
  2. REV()=
  3. para cualquier 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))

Puede demostrar formalmente que esta construcción es correcta como ejercicio.

¡Espero que esto ayude!

templatetypedef
fuente
¡Hola! Aterricé aquí porque estaba pensando en la idea de expresiones regulares invertidas, como una forma de optimizar una coincidencia anclada a la derecha contra una cadena: alimentar los caracteres al autómata inverso, en orden inverso. Un pase. Escribí las propiedades algebraicas de la inversión de expresiones regulares, y coincide con su tabla casi exactamente, incluso usando la rev()notación. :) Yo también bajé REV(R1&R2) = REV(R1)&REV(R2); Tengo una implementación de expresiones regulares que tiene intersección. Si; Estoy pensando en agregar un operador para la inversión tal vez R\r(elemento regex anterior inverso).
Kaz
Aquí hay uno complicado: ¿cuál es la regla algebraica para REV (~ R): negación regex? REV(~R)es el reverso del conjunto de todas las cadenas fuera de R. ¿Es lo mismo que ~REV(R): el conjunto de todas las cadenas fuera del reverso del conjunto denotado por R? Esto no está claro en absoluto porque también hay palíndromos Radentro REV(R).
Kaz
1

Usando expresiones regulares, demuestre que si es un lenguaje regular, entonces \ emph {inversión} de L , L R = { w R : w L } , también es regular. En particular, dada una expresión regular que describe L , mostrar por inducción cómo convertir en una expresión regular que describe L R . Su prueba no debe recurrir a los NFA. LLLR={wR:wL}LLR

Vamos a suponer que se nos da una expresión regular que describe . Veamos primero el operador de concatenación ( ), y luego podemos pasar a operadores más avanzados. Entonces, nuestros casos de concatenación tienen que ver con la longitud de lo que se concatena. Entonces, primero romperemos todas las concatenaciones de a b a a b . Al tratar con estos, separe los componentes tanto como sea posible: ( a b a ) b ( a b a ) bLabab(aba)b(aba)b, pero no puede romper el orden asociativo entre diferentes comprensiones, por supuesto.

Cuando R

Cuando , tenemos la cadena vacía que ya está invertida, por lo que el mecanismo no cambias=ϵ

Cuando es solo una letra, como en s Σ , la inversión es solo esa letra, sssΣs

Cuando , tenemos un solo componente, por lo que simplemente invertimos ese componente y, por lo tanto, σ Rs=σσR

Cuando donde k es impar, tenemos una expresión regular que se puede escribir como ( σ 0σ 1 . . . Σ k - 1σ k )s=(σ0σ1...σk1σk)(σ0σ1...σk1σk). La inversión de estas cadenas de longitud uniforme es simple. Simplemente cambie el índice 0 con el índice k. Luego cambie el índice 1 con el índice k-1. Continúe hasta que cada elemento se haya cambiado una vez. Por lo tanto, el último elemento es ahora el primero en el registro, y el primero es el último. El penúltimo es el segundo y el segundo es el penúltimo. Por lo tanto, tenemos un registro inverso que aceptará la cadena invertida (la primera letra es la última, etc.) Y, por supuesto, invertimos cada componente. De esta manera obtendríamos (σkRσk1R...σ1Rσ0R)

Cuando donde k es par, tenemos una expresión regular en general que se puede escribir como ( σ 0σ 1 . . . σ k - 1σ k )s=(σ0σ1...σk/2...σk1σk)(σ0σ1...σk1σk). La inversión de estas cadenas de longitud uniforme es simple. Simplemente cambie el índice 0 con el índice k. Luego cambie el índice 1 con el índice k-1. Continúe hasta que cada elemento se haya cambiado una vez, pero el elemento k / 2 (un entero porque k es par). Por lo tanto, el último elemento es ahora el primero en el registro, y el primero es el último. El penúltimo es el segundo y el segundo es el penúltimo. Por lo tanto, tenemos un registro inverso que acepta la cadena invertida (la primera letra es la última, etc.). Y esa letra del medio. Y, por supuesto, revertimos cada componente. De esta manera obtendríamos (σkRσk1R...σk/2R...σ1Rσ0R)

De acuerdo, la parte difícil está hecha. Miremos al operador . Esto es simplemente una unión de conjuntos. Entonces, dadas dos cadenas, s 1 , s 2 , el reverso de s 1s 2 es solo s R 1s R 2 . La unión no cambiará. Y esto tiene sentido. Esto solo agregará cadenas a un conjunto. No importa en qué orden se agreguen al conjunto, lo único que importa es que lo sean.s1,s2s1s2s1Rs2R

El operador estrella de kleene es el mismo. Simplemente está agregando cadenas a un conjunto, sin decirnos cómo debemos interpretar el análisis de cadenas. Entonces, revertir una estrella kleene de una cadena , es solo ( ( s R ) ) . La inversión solo puede moverse a través de ellos.s((sR))

Por lo tanto, para revertir esto simplemente seguimos las reglas. Para invertir la unión externa, simplemente invertimos sus dos componentes. Para revertir esto: ( ( a b ) ( a ) ) estrella de kleene, simplemente invertimos lo que está dentro de ella ( ( ( a(((ab)(a))((ab)(b)))R((ab)(a)) . Luego, para revertir una concatenación, indexamos y luego cambiamos de mayor a menor. Entonces comenzamos con ( ( a b ) ( a ) ) R y obtenemos ( ( a ) R( a b ) R ) . Para revertir esa letra única, llegamos a nuestro caso base y obtenemos ( a ) R( a )(((ab)(a))R)((ab)(a))R((a)R(ab)R)(a)R(a). Este proceso descrito anteriormente describe una descripción inductiva de este cambio.

usuario2524930
fuente