¿Cuándo es inequívoca la concatenación de dos idiomas regulares?

16

Dados los idiomas A y B , digamos que su concatenación AB es inequívoca si para todas las palabras wAB , hay exactamente una descomposición w=ab con aA y bB , y de lo contrario es ambigua . (No sé si hay un término establecido para esta propiedad, ¡algo difícil de buscar!) Como ejemplo trivial, la concatenación de {ε,a} en sí misma es ambigua ( w=a=εa=aε ), pero la concatenación de consigo misma no es ambigua.{a}

¿Existe algún algoritmo para decidir si la concatenación de dos idiomas regulares es inequívoca?

rstern
fuente
1
Gah, esto es totalmente un problema de primer año de CS, ¿no? Honestamente, no he intentado mucho; Esperaba que haya un algoritmo establecido para esto en algún lugar de la literatura y no tendría que reinventar la rueda. Estoy escribiendo software por aquí; Solo tomé un par de cursos de CS (hace varios años), así que básicamente estoy empezando desde Wikipedia. Sé que a nadie le gusta alguien que no quiere trabajar por su respuesta, por lo que si hay un libro de texto o un documento o algo a lo que me pueda indicar en lugar de simplemente entregarme un algoritmo, ¡sería útil! ¡Gracias!
rstern
Agregué esto como un comentario porque, bueno, está relativamente fuera de tema, pero tal vez pueda ayudarlo. El Consorcio Unicode tiene algunos procesos para determinar la similitud entre los idiomas. He leído un enlace muy informativo en su sitio, pero por mi vida no pude encontrarlo hoy como respuesta. Si tiene tiempo para investigar esto, aquí está su página de preguntas frecuentes unicode.org/faq
htm11h

Respuestas:

10

Sugerencia: dados los DFA para y B , construya un NFA que acepte palabras en A B que tengan al menos dos descomposiciones diferentes. El NFA realiza un seguimiento de dos copias del NFA estándar para A B (formado uniendo DFA para A y B con transiciones ϵ ), asegurando que el cambio de A a B ocurra en dos puntos diferentes.ABABABABϵAB

Yuval Filmus
fuente
¡Gracias por la pista! Entonces, si entiendo, puedo construir un NFA para palabras ambiguas en y luego probar ese autómata en busca de vacío. La parte difícil parece ser "asegurar que el cambio de A a B ocurra en dos puntos diferentes". No estoy seguro de cómo hacer eso, aparte de tomar el producto cruzado (?) De dos DFA A B y eliminar todos los estados del producto ( A -terminal, A -terminal): estoy agitando las manos, me preocupa que la transición de A B NFA a A B DFA estaría en desacuerdo con la idea de AABABABAAABABA-terminal. Suena, um, aunque ineficiente; ¿Existe un algoritmo conocido adecuado para el software?
rstern
Sí, no suena demasiado eficiente, aunque siempre existe la opción de hacerlo de manera inteligente. No conozco ningún algoritmo específico para este problema, pero podría existir uno.
Yuval Filmus
7

Actualizado (gracias a Yuval Filmus).

Dados dos idiomas e Y de A , dejemos X - 1 YXYA Yo afirmo queXYno es ambiguo si y solo si el lenguajeX-1XYY-1A+está vacío.

X1Y={uAthere exists xX such that xuY}YX1={uAthere exists xX such that uxY}
XYX1XYY1A+

XYuXYu=x1y2=x2y1x1,x2Xy1,y2Yx1x2x2=x1zzA+u=x1y2=x1zy1y2=zy1. Thus zX1XYY1.

Suppose now that X1XYY1 contains some nonempty word z. Then there exist x1,x2X and y1,y2Y such that x2=x1z and y2=zy1. It follows that x2y1=x1zy1=x1y2 and hence the product XY is ambiguous.

If X and Y are regular, then both X1X and YY1 are regular and thus X1XYY1 is also regular (see Yuval's answer for an automaton accepting this language).

J.-E. Pin
fuente
What if z is the empty word?
Yuval Filmus
Ooops. I update.
J.-E. Pin