¿Un lenguaje regular dado contiene un subconjunto infinito libre de prefijos?


11

Un conjunto de palabras sobre un alfabeto finito no tiene prefijo si no hay dos palabras distintas donde una sea un prefijo de la otra.

La pregunta es:

¿Cuál es la complejidad de verificar si un lenguaje regular dado como NFA contiene un subconjunto infinito libre de prefijos?

Respuesta (debido a Mikhail Rudoy, ​​aquí abajo) : Se puede hacer en tiempo polinómico, y creo que incluso en NL.

Parafraseando la respuesta de Mikhail, dejemos ser el NFA de entrada en la forma normal (sin transiciones épsilon, trim), y dejemos (resp. ) ser el lenguaje obtenido al tener el estado como estado inicial y como estado final (resp. estado como inicial y el conjunto como final). Para una palabra vamos es la palabra infinita obtiene iterando .(Σ,q0,F,δ)L[p,r]L[p,R]p{r}pRuuωu

Los siguientes son equivalentes:

  1. El lenguaje contiene un subconjunto infinito libre de prefijos.L[q0,F]
  2. qQu L [ q , q ] { ε } v L [ q , F ] v u ω , para que no sea un prefijo de .uL[q,q]{ε} vL[q,F]vuω
  3. qQ L[q,q]{ε} uL[q,q] vL[q,F]v u ω para que no sea un prefijo de .vuω

Prueba:

3 2 trivial.

Para 2 1, es suficiente ver que para cualquier tenemos que es un subconjunto infinito sin prefijo de .wL[q0,q]w(u|v|)vL[q0,F]

Finalmente, 1 3 es la prueba de "corrección" en la respuesta de Mikhail.

Respuestas:


7

Su problema puede resolverse en tiempo polinómico.

Para comenzar, convierta el NFA dado en un NFA equivalente con las siguientes propiedades adicionales:

  • No hay transiciones epsilon
  • Todos los estados son accesibles desde el estado inicial

Subrutina útil

Supongamos que tenemos un NFA , un estado y una cadena no vacía . La siguiente subrutina nos permitirá evaluar el valor de verdad de la siguiente declaración: "cada ruta en desde el estado a un estado de aceptación corresponde a una cadena que es un prefijo de la cadena para algún ". Además, esta subrutina se ejecutará en tiempo polinómico.NqsNqsnn

Primero, construya el NFA con estados que aceptan todas las cadenas que no son prefijos de para cualquier ( estados no aceptados en un bucle para realizar un seguimiento de dónde estamos en el "patrón" de hasta ahora, y uno aceptar estado para si ya nos hemos desviado de ese patrón). A continuación, construya el NFA que es exactamente igual a pero tiene como estado inicial. Finalmente, construya un NFA final cuyo lenguaje seaS|s|+1snn|s|sssssNNqNL(N)L(S)L(N)utilizando la construcción de intersección NFA estándar. Tenga en cuenta que todas estas construcciones son polinómicas en el tamaño de la entrada.

Luego, simplemente pruebe si el lenguaje de está vacío (lo que se puede hacer en tiempo polinómico con una simple búsqueda de gráficos). si y solo si , o en otras palabras, cada cadena en no está en . En otras palabras, el lenguaje de está vacío si y solo si acepta solo cadenas que son prefijos de para alguna . Esto puede reformularse como exactamente la declaración que estábamos tratando de evaluar: "cada ruta en desde el estado a un estado de aceptación corresponde a una cadena que es un prefijo de la cadenaNL(N)=L(S)L(N)=L(N)L(S)NNsnnNqsnpara algunos ".n

Algoritmo principal

Considere el conjunto de estados en la NFA que están en algún bucle. Para cada estado, , haga lo siguiente:q

Deje que sea ​​cualquier bucle simple que contenga . Sea la cadena correspondiente al bucle . Como el NFA no tiene transiciones epsilon, no está vacío. Luego aplique la subrutina a la NFA, el estado y la cadena . Si la subrutina nos dice que cada ruta que comienza en en el NFA y termina en un estado de aceptación corresponde a un prefijo de para alguna entonces continúe al siguiente estado . De lo contrario, indique que el lenguaje de NFA dado contiene un subconjunto infinito libre de prefex.P2qsP2sqsqsnnq

Si probamos todos los estados que están en un bucle y el algoritmo nunca sale, entonces el lenguaje del NFA dado no contiene un subconjunto infinito libre de prefex.q

Corrección (primera mitad)

Primero, suponga que el algoritmo anterior afirma que el lenguaje de NFA dado contiene un subconjunto infinito libre de prefex. Digamos que esta salida se seleccionó al considerar algunos bucles y algunos estados . Como antes, es la cadena correspondiente a . Entonces sabemos de acuerdo con la subrutina que no todas las rutas que comienzan en en el NFA y terminan en un estado de aceptación corresponden a un prefijo de para alguna (ya que esta es la única salida de la subrutina que conduciría a la principal algoritmo de salida en ese ).P2qsP2qsnnq

Supongamos que es una ruta cuya existencia es afirmada por la subrutina: una ruta de a un estado de aceptación de modo que la cadena correspondiente no sea un prefijo de para cualquier .P3qtsnn

Supongamos que consiste en copias de donde es lo suficientemente grande como para que. Como es un bucle a través de , puede tratarse como una ruta de a . La cadena correspondiente a esP2mP2mm|s|>|t|P2qP2qqP2sm

Deje que sea ​​una ruta desde el estado inicial hasta (que existe ya que se puede acceder a cada estado desde el inicio) y sea la cadena correspondiente a esta ruta.P1qr

Entonces, la ruta que consiste en , copias de y es una ruta de cálculo de aceptación. La cadena correspondiente a esta ruta es . Por lo tanto, el NFA acepta cada cadena de la forma . Este es un conjunto infinito de cadenas aceptado por la NFA, y afirmo que este conjunto de cadenas está libre de prefijos. En particular, suponga que es un prefijo de con . En otras palabras, es un prefijo de . Como tiene una longitud, esto implica queP1xP2P3r(sm)xtr(sm)xtr(sm)xtr(sm)yty>xt(sm)yxt(sm)yxm(yx)|s|m|s|>|t|t es un prefijo de . Pero sabemos por la salida de la subrutina que no es un prefijo de para cualquier . Por lo tanto, no puede ser un prefijo de , y como se desee, el conjunto de cadenas no tiene prefijo.(sm)yx=sm(yx)tsnnr(sm)xtr(sm)yt

Por lo tanto, he demostrado que si el algoritmo principal genera que el lenguaje de la NFA dado contiene un subconjunto infinito libre de prefex, este es el caso.

Corrección (segunda mitad)

A continuación, mostraré la otra mitad: si el lenguaje de NFA dado contiene un subconjunto infinito libre de prefex, el algoritmo principal generará este hecho.

Supongamos que el lenguaje de NFA dado contiene un subconjunto infinito libre de prefijos. Sea el conjunto de rutas de cálculo (que acepta) correspondientes a estas cadenas. Observe que es un conjunto infinito de rutas de cálculo de aceptación cuyas cadenas correspondientes nunca son prefijos entre sí.AA

Digamos que un estado está "en bucle" en la NFA si existe un bucle en la NFA a través de ese estado y "no en bucle" de lo contrario. Considere todas las rutas desde el estado inicial a cualquier estado de bucle que pase a través de solo estados que no sean de bucle (excepto el estado de bucle donde terminan). Sea el conjunto de estos caminos. Cada ruta no puede tener un bucle ya que los estados en ese bucle serían estados de bucle y, por lo tanto, pasaría por un estado de bucle. Por lo tanto, las longitudes de las rutas en están limitadas anteriormente por el número de estados en el NFA y, por lo tanto, es finito (por ejemplo, si el estado de inicio es un estado en bucle, entonces la única ruta es la ruta vacía).PpPpPP

Podemos dividir en subconjuntos función de cómo comienzan las rutas de cálculo enEn particular, para , dejó el conjunto de todos los caminos de cálculo en que se inician con el camino de y dejar el conjunto de todos los otros caminos en . Claramente, todo s y son disjuntos y su unión es todo el conjunto . Además, contiene solo rutas que nunca pasan a través de un estado de bucle y, por lo tanto, nunca se repiten; así es finito. Podemos concluir entonces que algunosA|P|+1ApPApApBAApBABBApdebe ser infinito (de lo contrario, sería una unión de muchos conjuntos finitos).A

Como es infinito, hay infinitas rutas de cálculo, ninguna de cuyas cadenas son prefijos entre sí, que aceptan rutas que comienzan con . Sea el estado alcanzado al final del camino . Podemos concluir que hay infinitas rutas de aceptación, llame a este conjunto , comenzando en todas las cuales corresponden a cadenas que no son prefijos entre sí.AppqpAq

Durante el algoritmo principal, ejecutamos la subrutina en el estado y algunas cadenas . Esta subrutina nos dice si cada ruta de aceptación que comienza en corresponde a una cadena que es un prefijo de para alguna . Si este fuera el caso, todas las infinitas rutas de aceptación en serían prefijos de para varios , lo que implicaría que todos son prefijos entre sí. Este no es el caso, por lo que concluimos que cuando el algoritmo principal ejecuta la subrutina en el estadoqsqsnnAsnnq, el resultado es el otro resultado posible. Sin embargo, esto lleva al algoritmo principal a generar que el lenguaje de la NFA contiene un subconjunto infinito libre de prefijos.

Esto concluye la prueba de corrección.


No entiendo cómo funciona el manejo de bucles, ya que un estado dado puede ser parte (exponencialmente) de muchos bucles. Por supuesto, si dos de esos bucles se pueden usar para generar una secuencia no periódica, entonces hemos terminado. q
japh

¿Qué quieres decir con manejo de bucles? En el algoritmo principal, para cada estado elige solo un bucle que pasa por (cualquier bucle fuera de los potencialmente exponencialmente muchos) y llama a ese bucle (después de eso ejecuta la subrutina en el estado y la cadena donde es la cadena asociado con ). La subrutina maneja esencialmente la verificación de si es posible generar una secuencia no periódica usando ese ciclo. Si es así, entonces hemos terminado. Si no (y además no por cada ), entonces todo su lenguaje es una unión de secuencias periódicas, por lo que también hemos terminado. q P 2 q s s P 2 qqqP2qssP2q
Mikhail Rudoy

Para aclarar mi pregunta, aquí hay un NFA simple con estado inicial , estado final y tres transiciones: , , . El bucle para no generará las cadenas sin prefijo, pero el bucle para hará. T q a q q b q q a T a bqTqaqqbqqaTab
japh

En realidad, el bucle de sí genera un conjunto gratuito de prefijo: el conjunto de cadenas todo el uso del bucle. En mi algoritmo, si el bucle que elija para es el bucle entonces la subrutina determinará que no, no todos los caminos aceptar a partir de las tiene una cadena de la forma , y así el algoritmo principal dirá que un infinito existe un subconjunto sin prefijo. Si el bucle que utiliza el algoritmo para es el bucle entonces la subrutina determina que no todas las rutas de aceptación que comienzan en tienen una cadena de la formaa b a a q a q a q b q b aabaaqaqaqbqb, y en este caso también el algoritmo tiene la misma salida.
Mikhail Rudoy

Gracias mijail! Creo que su respuesta resuelve la pregunta.
Googlo

2

Definiciones

Definición 1 : Sea un conjunto de palabras. Decimos que está muy bien libre de prefijos infinitos (nombre inventado a los efectos de esta respuesta) si hay palabras y tales que:SSu 0 , ... , u n , ... v 1 , ... , v n , ...u0,,un,v1,,vn,

  • Para cada , y no están vacías y comienzan con letras distintas;n1unvn

  • S={u0v1,,u0unvn+1,} .

La intuición es que puede poner todas esas palabras en un árbol con raíces infinitas ( es la raíz, son las hojas y son los nodos interiores restantes) de la siguiente forma, de modo que las palabras en son exactamente las etiquetas de los caminos de la raíz a una hoja:S

   u₀    u₁    u₂
■-----•-----•-----•⋅⋅⋅
      |     |     |
      | v₁  | v₂  | v₃
      |     |     |
      ▲     ▲     ▲

Proposición 1.1 : Un conjunto sin prefijos muy bien infinito no tiene prefijos.

Prueba de la proposición 1.1 : Suponga que es un prefijo estricto de . Hay dos casos:u0unvn+1u0umvm+1

  • Si entonces es un prefijo de . Esto es imposible porque y tienen primeras letras distintas.n<mvn+1un+1umvm+1un+1vn+1

  • Si entonces es un prefijo de . Esto es imposible porque y tienen primeras letras distintas.n>mum+1unvn+1vm+1um+1vm+1

Proposición 1.2 : Un conjunto libre de prefijos muy infinito es infinito.

Prueba de la proposición 1.2 : En la prueba 1.1, mostramos que si entonces y no son comparables para el orden de prefijo. Por lo tanto, no son iguales.nmu0unvn+1u0umvm+1


Prueba principal

Proposición 2 : cualquier conjunto sin prefijo infinito contiene un buen conjunto sin prefijo infinito.

Proposición 3 : un lenguaje contiene un conjunto libre de prefijos infinito si y solo si contiene un conjunto libre de prefijos infinito.

Prueba a continuación.

Prueba de la proposición 3 : por la proposición 2. por las proposiciones 1.1 y 1.2.

Propuesta 4 : El conjunto de subconjuntos sin prefijos de un lenguaje regular (codificado como una palabra infinita ) es -regular (y el tamaño del autómata Büchi que lo reconoce es polinómico en el tamaño del NFA que reconoce el lenguaje regular).u0¯v1^u1¯v2^u2¯ω

Prueba a continuación.

Teorema 5 : Decidir si un lenguaje regular descrito por un NFA contiene un subconjunto infinito libre de prefijos puede hacerse a tiempo polinomial en el tamaño del NFA.

Prueba del teorema 5 : mediante la proposición 3, es suficiente probar si contiene un subconjunto libre de prefijos muy bien infinito, que se puede hacer en tiempo polinomial construyendo el autómata Büchi dado por la proposición 4 y probando la falta de vacío de su lenguaje (que se puede hacer en tiempo lineal en el tamaño del autómata Büchi).


Prueba de proposición 2

Lema 2.1 : Si es un conjunto libre de prefijos, entonces también lo es (para cualquier palabra ).Sw1Sw

Prueba 2.1 : por definición.

Lema 2.2 : Sea un conjunto infinito de palabras. Deje sea la más larga común prefijo a todas las palabras en . y tienen el mismo cardenal.Sw:=lcp(Sn)SSw1S

Prueba 2.2 : Definir por . Está bien definido por definición de , inyectivo por definición de y sobrejetivo por definición de .f:w1SSf(x)=wxw1Sfw

Prueba de la proposición 2 : Construimos y por inducción en , con la hipótesis de inducción compuesta de las siguientes partes:unvnnHn

  • (P1) Para todos los , ;k{1,,n}u0uk1vkS

  • (P2) Para todos los , y no están vacíos y comienzan con letras distintas;k{1,,n}ukvk

  • (P3) Sn:=(u0un)1S es infinito;

  • (P4) No hay un prefijo no vacío común a todas las palabras en . En otras palabras: no hay letra tal que .SnaSnaΣ

Observación 2.3 : Si tenemos secuencias que verifican sin , podemos modificar para que también satisfagan . De hecho, es suficiente reemplazar por . no se ve afectado. es trivial. es por construcción. es por lema 3.Hn(P4)un(P4)ununlcp(Sn)(P1)(P2)(P4)(P3)

Ahora construimos las secuencias por inducción en :n

  • Inicialización: es verdadero tomando (es decir, tomando y aplicando el comentario 3.1).H0u0:=lcp(S)u0:=ε

  • Paso de inducción: supongamos que tenemos las palabras y modo que para algunos . Construiremos y manera que .u1,,unv1,,vnHnnun+1vn+1Hn+1

Dado que es infinito y libre de prefijos (por el lema 1), no contiene modo que . Como es infinito, hay una letra tal que es infinito. Por , hay una letra distinta de tal que no está vacía. Elija . Tomar como satisfaría , ySnεSn=aΣ(SnaΣ)SnaSnaΣ(P4)baSnbΣvn+1SnbΣun+1a(P1)(P2)(P3)entonces aplicamos el comentario 3.1 para obtener : .(P4)un+1:=alcp(a1Sn)

(P1) u1unvn+1u1un(SnbΣ)S .

(P2) Por definición de y .un+1vn+1

(P3) a1Sn es infinito por definición de , y es por lo tanto infinito por el lema 3.aSn+1

(P4) Por definición de .un+1


Prueba de proposición 4

Prueba de la proposición 4 : Sea un NFA.A=(Q,,Δ,q0,F)

La idea es la siguiente: leemos , recordamos dónde estamos, leemos , retrocedemos a donde estábamos después de leer , leemos , recordamos dónde estamos ... También recordamos la primera letra que se leyó en cada para asegurarse de que comience con otra letra.u0v1u0u1vnun

Me han dicho que esto podría ser más fácil con autómatas de múltiples cabezales, pero no estoy muy familiarizado con el formalismo, así que lo describiré usando un autómata Büchi (con solo una cabeza).

Configuramos , donde los símbolos se usarán para describir los sy los símbolos con sombreros para los s.Σ:=Σ¯Σ^ukvk

Configuramos , donde:Q:=Q×({}(Q×Σ))

  • (q,) significa que estás leyendo alguna ;un

  • (q,(p,a)) significa que terminó de leer algo de en el estado , que ahora está leyendo que comienza con una , y que una vez que haya terminado, volverá a para leer un que no comienza con .unpvn+1apun+1a

Establecemos porque comenzamos leyendo .q0:=(q0,)u0

Definimos como .FF×Q×Σ

El conjunto de transiciones se define de la siguiente manera:

  • " " Para cada transición , agregue ;unqaq(q,)a¯(q,)

  • " a " Para cada transición , agregue ;unvn+1qaq(q,)a^(q,(q,a))

  • " " Para cada transición , agregue ;vnqaq(q,(p,a))a^(q,(p,a))

  • " to " Para cada transición donde es final y la letra distinta de , add ;vnunpappba(q,(p,b))a¯(p,)

Lema 4.1 : es aceptado por iff para cada , y no están vacías y comienzan con letras distintas, y para cada , .u0¯v1^u1¯v2^un¯vn+1^An1unvnn0u0unvn+1L(A)

Prueba del lema 4.1 : Dejado al lector.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.