Es {ww '| HamDist (w, w ')> 1} ¿sin contexto?

13

Después de leer el reciente pregunta "¿Es el complemento de {www...} Libre de contexto?" ; Recordé un problema similar que no pude refutar:

Es L={www,w{0,1}|w|=|w|HamDist(w,w)>1} sin contexto?

Aquí requerimos que las dos cadenas difieran en al menos dos posiciones (la distancia de Hamming debe ser mayor que 1 ).

No tiene contexto si requerimos que HamDist(w,w)1 (es decir, las dos cadenas simplemente deben ser diferentes).

Sospecho que el lenguaje no está libre de contexto: si lo intersectamos con el 0101010 normal , obtenemos casos en los que un PDA debería "recordar" dos posiciones en orden inverso después de llegar a la mitad de la cadena.

Actualización: si intersectamos L con el R={0101010} regular , obtenemos un lenguaje sin contexto como lo muestra domotorp en su respuesta; un LR un poco más complejo con R={01010101010} (un 1 más para "hacer un seguimiento" de) todavía sugiere que L no debería estar libre de contexto.

Marzio De Biasi
fuente
es realmente más fácil, ya que son exactamente las palabras que no tienen la forma w w (intersectadas por R ). LRwwR
domotorp
@domotorp: correcto! cambiado a s fijo impar (a menos que su respuesta se pueda adaptar también a { ( 0 1 0 ) k } , para cualquier k impar impar )1{(010)k}k
Marzio De Biasi
Un comentario final: no ayuda comenzar con ceros a la izquierda, ya que los lenguajes libres de contexto están cerrados para todo tipo de cambios cíclicos. Podrías simplemente empujarlos a la pila, marcar el último con un símbolo especial, hacer el resto del algoritmo fingiendo que la pila comienza allí, y al final vaciarlo. (Esto usa las transiciones , pero también es fácil que tales PDA sean equivalentes a las que no tienen)ϵ
Domotorp
podría ser más simple pensar en el alfabeto {0,1,2} y considerar cadenas con exactamente dos 1s y dos 2s. No está en su idioma si la distancia entre 1s y la distancia entre 2s son ambas n.
Kaveh

Respuestas:

4

La intersección con R={0101010 palabras de longitud uniforme } tiene contexto, porque un PDA puede recordar dos posiciones, de una manera. De todos modos, vamos a ver primero lo que este lenguaje L es. Su complemento es RL={0a10b10c10db=n/2c=n/2a+d=n/2}. Por lo tanto, L={0a10b10c10dbn/2cn/2a+dn/2} . Podemos reescribir esto como L={0a10b10c10db>n/2c>n/2a+d>n/2b,c,a+d<n/2} .

Los primeros 3 casos se pueden verificar fácilmente, y también el cuarto.

b>n/2 : Comience a colocar en la pila hasta el primer 1, luego comience a aparecer desde la pila hasta que no esté vacío. Después de que esté vacío, nuevamente comience a colocar en la pila hasta llegar al segundo 1. A partir de ese momento, haga estallar la pila.

c>n/2 : igual.

a+d>n/2: Start putting in the stack until the first 1, then start popping from the stack until it's non-empty. After it's empty, again start putting in the stack until we reach the third 1. From then on pop the stack.

b,c,a+d<n/2: Start putting in the stack until the first 1, then start popping from the stack until it's non-empty. After it's empty, again start putting in the stack until we reach a+n/2 (guessed non-deterministically, somewhere between second and third 1). From then on pop the stack.

domotorp
fuente
Thanks domotorp, I'm reading your idea; I think RL is {0a10b10c0c10d (n/2=a+b+c=c+d+1)[(a=c)(c=d)} (two 1s on the left half) union its reverse (two 1s on the right half). So how do you get b=n/2c=n/2a+d=n/2?
Marzio De Biasi
RL is that the HamDist is at most 1. This happens exactly if two of the three 1's match, i.e., one is in the same position in the first half, as the other is in the second half. If these two 1's are the first and second 1's, then we get b=n/2, if they are the second and third 1's, we get c=n/2, and if they are the first and third 1's, we get b+c=n/2, or equivalently, a+d=n/2 (where I'm cheating a bit with some constant ±1's).
domotorp
Does this answer the full question?
Michaël Cadilhac
@domotorp: ok I got it, thanks! Another doubt: from LR={...bn/2cn/2...} (which is ok) you write LR={...b>n/2c>n/2b,c<n/2} but, is it equivalent to: LR={...(b<n/2b>n/2)(c<n/2c>n/2)}? (a+d condition omitted)
Marzio De Biasi
@Michael: No.  
domotorp