Construya un PDA para el complemento de

16

Me pregunto si esto es posible, ya que{anbncnn0}CFL . Por lo tanto, un PDA que puede distinguir una palabra del resto de podría aceptarla , lo que me parece contradictorio.w{anbncnn0}{abc}

Supongo que necesito aprovechar la naturaleza no determinista de los PDA, pero no tengo ideas. Si pudiera ofrecer algún consejo, lo agradecería mucho.

Hauptbenutzer
fuente
Punto interesante al respecto que parece contradictorio. De hecho, los lenguajes sin contexto no se cierran tomando el complemento ... por lo que hay muchos ejemplos de lenguajes sin contexto que podrían ser "aceptados" en el sentido al que alude. No soy un teórico y, como tal, realmente no puedo conciliar esto, pero tal vez alguien más pueda intervenir sobre por qué esto no es algo de qué preocuparse.
Patrick87
Tenga en cuenta que esto generaliza: el complemento de es un CFG. {anbncndnen}
sdcvvc
Pregunta similar .
Raphael

Respuestas:

15

No, esto no tiene contexto. Para aceptar anbncn , debe asegurarse de que tres números sean iguales. Para aceptar abcanbncn , solo necesita asegurarse de estar en uno de los siguientes tres casos:

  1. El número de a s es diferente del número de b s; o
  2. El número de s es diferente del número de cac s; o
  3. El número de s es diferente del número de cbc s.

Escriba un PDA para cada uno de estos casos, luego combínelos saltando de manera no determinista a cada uno desde el estado inicial.

Patrick87
fuente
Había escrito bien estos casos, pero me faltaba la idea de conectarlos. ¡Gracias!
hauptbenutzer
44
En realidad solo necesitas dos casos.
sdcvvc
@sdcvvc Buen punto. :)
Patrick87
Para diferentes números de caracteres, considere esto como inspiración: . Debería ser simple pegar a + a la izquierda de esto o c + a la derecha y convertir esto en un PDA. Para el caso complicado (que no necesita) S a S c | A | C ; A a B |SxSy|X|Y;Xx|xX;Yy|yYa+c+ . SaSc|A|C;AaB|aA;CBc|Cc;Bε|bB
Jonas Kölker