Edición de «Demostraciones (Teoría de Lenguajes)»

De Cuba-Wiki
Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces publica los cambios para así efectuar la reversión.

Revisión actual Tu texto
Línea 207: Línea 207:


Resumiendo, la idea es mantener tres ''niveles'' en el autómata, uno de los cuales contiene los estados finales (3), el otro los estados alcanzados a través de una transición lambda que pasaron por un final (2) y el último los no alcanzados por lambda desde un final (1).
Resumiendo, la idea es mantener tres ''niveles'' en el autómata, uno de los cuales contiene los estados finales (3), el otro los estados alcanzados a través de una transición lambda que pasaron por un final (2) y el último los no alcanzados por lambda desde un final (1).
= Máquinas de Turing =
Las máquinas de Turing se definen como un autómata con una cinta infinita a derecha (es decir, las celdas van de cero a infinito positivo) con la siguiente aridad:
<math>MT = <Q, \Gamma ,B , \Sigma , \delta ,q_0, F></math>
* <math>Q</math> conjunto de estados
* <math>\Gamma</math> alfabeto de la cinta
* <math>B \in \Gamma</math> símbolo blanco, representa una celda vacía
* <math>\Sigma \subset \Gamma</math> alfabeto de entrada, no incluye al blanco
* <math>\delta : Q \times \Gamma \rightarrow partes(Q \times \Gamma \times \{ L,R\} )</math> acciones
* <math>q_0 \in Q</math> estado inicial
* <math>F \subseteq Q</math> estados finales
Las acciones de la máquina dependen del estado actual y del símbolo que hay bajo la cabeza lectora/escritora, e implican escribir otro símbolo (puede ser el mismo) y moverse a izquierda o derecha.
La configuración instantánea de una máquina de Turing se define como <math>\alpha _1 q \alpha _2</math>, donde <math>\alpha _1</math> es el contenido de la cinta (sucesión de caracteres) a la izquierda del cabezal, ''q'' es el estado actual de la máquina, y <math>\alpha _2</math> es el contenido de la cinta desde el cabezal hasta el último símbolo distinto de blanco. Así, se puede especificar cuál es el estado actual, el contenido de la cinta y la posición del cabezal.
La cinta inicialmente comienza llena de blancos, excepto al comienzo donde tiene escrito el input a reconocer. Notar que el caracter blanco no puede pertenecer al alfabeto de entrada.
La máquina acepta una cadena si en su ejecución llega a un estado final, notar que la máquina no tiene transiciones desde un estado final. Como la cadena está escrita en la cinta, no existe el concepto de consumir la cadena de entrada.
== Máquina de Turing determinística ==
Una máquina de Turing es determinística cuando dado un estado y un símbolo bajo el cabezal existe una única acción. Vale que una máquina determinística puede emular a una no determinística.
Para esto se construye una MTD M' que reconoce la cadena cuando esta pertenece al lenguaje y se cuelga cuando no pertenece. La MTD construida tiene tres cintas (se puede demostrar que una máquina con un número finito de cintas equivale a una de una sola cinta). La idea es guardar en la primer cinta la cadena de entrada, en la segunda un número que simboliza una traza a seguir de la máquina M original, y la tercera usarla para emular las operaciones de M.
Para simbolizar una traza, se calcula el máximo grado de salida (r) de los nodos de la máquina M, se numera cada transición a partir de cada estado con un número de 1 a r, y se escribe una secuencia de dígitos entre 1 y r. Esto permite recorrer todas las posibles secuencias de configuraciones instantáneas en BFS.
La MTD M', entonces, en cada iteración copia la entrada de la primer cinta a la tercera, incrementa en 1 el valor de la segunda cinta (número expresado en base ''r'' que simboliza la traza) y con esa traza emula a M sobre la tercer cinta. Si termina en estado de aceptación, se acepta la cadena. Si se traba o termina en un estado no final, se itera nuevamente.
== Lenguajes Recursivamente Enumerables ==
Los LRE (lenguajes tipo 0 en la jerarquía de Chomsky) son lenguajes reconocibles por una máquina de Turing. Son aquellos que pueden especificarse sin restricciones sobre sus producciones.
=== Gramática a MTND ===
Para pasar de una gramática tipo 0 a una MTND, se utilizan dos cintas. En la primera se guarda la cadena; en la segunda se van generando formas sentenciales de manera no determinística a partir del símbolo distinguido S. Cuando se encuentra alguna que matchea la entrada, se acepta; si no, la máquina se cuelga.
=== MT a Gramática ===
Para pasar de una MT a una gramática se establece una equivalencia entre los símbolos de la gramática y las configuraciones instantáneas de la máquina de Turing. Los símbolos generados son de la forma [a,b], donde ''a'' representará el caracter original de la cadena de entrada y ''b'' el caracter sobre el que opera la máquina.
Se proveen producciones para generar, incialmente, una cadena arbitraria de símbolos [a,a], siendo ''a'' cualquier terminal. Esto equivale a tener inicialmente en la cinta cualquier cadena. Seguidos a estos se genera una cantidad libre de simbolos [lambda,Blanco], tantos como necesitaría la cinta para operar.
La gramática genera, al principio de todo, un caracter ''q'' que representará el cabezal de la máquina. Las producciones de la gramática permiten "mover" ''q'' entre los símbolos [a,b] (modificando solamente los ''b'') en base a las acciones permitidas por la MT original.
Una vez alcanzado un estado final, se generan producciones que eliminan todos los símbolos [a,b] dejando solamente los ''a'' correspondientes a la cadena original, y finalmente a ''q''. Así, la cadena final de terminales es la cadena a generar.
== Lenguajes Sensitivos al Contexto ==
Los lenguajes dependientes del contexto se expresan con gramáticas tipo 1 en la jerarquía de Chomsky, que tienen la restricción de que la longitud del lado derecho de una producción no puede ser menor a la del lado izquierdo.
=== Autómata Linealmente Acotado ===
Los ALA pueden verse como máquinas de Turing con la cinta acotada. En un ALA el alfabeto de entrada incluye dos símbolos, usados como tope de entrada y tope de salida. El autómata no puede moverse más allá de los topes ni sobreescribirlos.
Notar que un ALA tal que en la cinta tenga una cantidad de blancos lineal a la longitud de la entrada es equivalente a un ALA con cero blancos, que opera exclusivamente sobre la cadena de entrada.
A diferencia de lo que sucedía con las MT, no hay equivalencia entre ALA y ALAD. A primera vista puede observarse que el método anterior no funciona pues el número que simboliza la traza a emular (en la segunda cinta) puede crecer arbitrariamente.
=== Gramática a ALA ===
La equivalencia entre una gramática sensitiva al contexto y un ALA se demuestra exactamente igual que para máquinas de Turing en general, excepto que en este caso puede agregarse la restricción de que si la cadena que se está generando excede el tamaño de la que se ha de reconocer se corta esa rama (pues ninguna cadena de terminales y no terminales puede derivar en una de longitud menor). Así la cantidad de posibilidades a explorar es finita.
== Lenguajes Recursivos ==
Los lenguajes recursivos se encuentran estrictamente entre los sensitivos al contexto y los recursivamente enumerables. Son aquellos reconocibles por una HTM (halting Turing machine). Es decir, existe una máquina de Turing que dada cualquier entrada, siempre para y devuelve si una cadena pertenece o no (no puede colgarse).
=== Inclusión de Sensitivos al Contexto ===
Para demostrar que los LSC están incluidos dentro de los recursivos, se construye una HTM que determine si una cadena pertenece al lenguaje. Dada una gramática GSC y una cadena de entrada w de longitud n, se construye un grafo finito donde cada nodo es un string de terminales y no terminales de longitud menor o igual a n.
Los arcos en este grafo representan si es posible ir de un string a otro mediante derivaciones de la gramática. Notar que este grafo es finito y puede construirse mediante un algoritmo.
Luego, para determinar si una cadena ''w'' pertenece al lenguaje, simplemente se verifica mediante un algoritmo si existe un camino desde ''S'' hasta el nodo que contiene a ''w''. Como lo anterior es un algoritmo (siempre termina) existe una HTM que lo ejecuta, con lo cual el lenguaje LSC es recursivo.
=== Lenguaje Recursivo no LSC ===
Para demostrar que existe un lenguaje recursivo no sensitivo al contexto se utiliza un argumento diagonal. Primero se prueba un lema que indica que dada cualquier enumeración de HTMs, existe un lenguaje recursivo que no es aceptado por ninguna de ellas (el lenguaje que dada la cadena ''i'', la acepta sii no es reconocida por la iesima HTM de la enumeración).
Eventualmente se llega a una contradicción, pues si existe una HTM de índice ''i'' en la enumeración, la cadena ''i'' debe ser reconocida por dicha HTM sii no lo es. Notar que este lenguaje es recursivo, pues existe un algoritmo (procedimiento que siempre termina) que puede determinar si una cadena ''i'' pertenece al conjunto: simplemente corre la HTM ''i'' con esa cadena y devuelve la negación.
A partir de esto, se construye una enumeración de las HTM que reconocen todos los LSC, lo cual es posible ya que se pueden enumerar las GSCs. Pero por el lema anterior existe un lenguaje que no es reconocido por ninguna de estas HTMs, es decir, por ningún LSC. Y este lenguaje es recursivo.
La demostración parece basarse en que el conjunto de HTMs no es Recursivamente Enumerable, mientras que el de GSCs sí lo es. Por lo tanto debe existir alguna HTM que genere un lenguaje no sensitivo al contexto.
== Lenguaje Diagonal ==
El lenguaje diagonal es un ejemplo de un lenguaje que no es recursivamente enumerable. Requiere enumerar las MT y entradas posibles y llegar a una contradicción similar a la del problema de la parada.
Más formalmente, se basa en construir una tabla infinita de dos entradas. La celda (i,j) entonces vale 1 sii la máquina de Turing de nro ''j'' reconoce la cadena ''i''. La MT se encuentra codificada en binario, y la cadena de entrada es de 0s y 1s.
Entonces, puede construirse el lenguaje de las cadenas ''i'' tal que no pertenecen a la MT de igual número (lenguaje diagonal). Si este lenguaje es recursivamente enumerable, entonces existe una MT ''Mk'' tal que reconce sus cadenas. En otras palabras,
<math>w_k \in L_d \Longleftrightarrow w_k \not \in L(M_k) = L_d</math>
Con lo que se llega a una contradicción. La cadena de igual número que ''M'' es reconocida por la máquina sii no es reconocida.
Otra opción (distinta a la del pdf, revisar) es un lenguaje que acepta una cadena sii esta representa una máquina de Turing con una entrada dada, y dicha máquina para. Si dicha máquina existiera, resolvería el halting problem, lo que no es posible.
== Lenguaje Universal ==
El lenguaje universal es el que se corresponde a la MT que ejecuta cualquier otra MT con cualquier entrada. En otras palabras, toma pares de cadena y MT, y determina si la cadena es reconocida por esa MT.
'''Recursivamente Enumerable'''
Este lenguaje es recursivamente enumerable. Puede construirse una MT con 3 cintas, de las cuales la primera contiene el input (la MT ''M'' más la cadena de entrada ''w''), la segunda (inicializada con la cadena ''w'') emula la cinta de ''M'', y la tercera permite llevar cuenta del estado en el que se encuentra la ''M'' emulada.
'''No Recursivo'''
Para demostrar que este lenguaje no es recursivo, se supone inicialmente que lo es y se intenta llegar al absurdo. Para esto, se construye un algoritmo (es decir, un procedimiento que siempre para, emulable por una HTM) que dada una cadena de entrada, genera su MT con igual número. Luego se determina, usando la HTM del lenguaje universal (supusimos que era recursivo) si <math>(w_i, MT_i)</math> es aceptado, esto es, si la máquina ''i'' acepta la cadena ''i''.
Notar que este es el complemento del lenguaje diagonal. Como es un algoritmo, siempre termina y devuelve verdadero o falso. Con lo que puede generarse fácilmente una HTM que reconozca el lenguaje diagonal directamente. Lo que es absurdo puesto que no es siquiera recursivamente enumerable.
Intuitivamente, el que el lenguaje universal sea recursivo significaría que es posible tener un método que siempre termina que resuelve (por sí o por no) la pertenencia de cualquier cadena a cualquier MT. Es decir, es capaz de decidir el halting problem.


= Analizadores Sintácticos Descendentes =
= Analizadores Sintácticos Descendentes =
Línea 775: Línea 658:


'''Propiedad:''' Toda gramática analizable con un parser predictivo descendente es analizable con un LR(1).
'''Propiedad:''' Toda gramática analizable con un parser predictivo descendente es analizable con un LR(1).
= Máquinas de Turing =
Las máquinas de Turing se definen como un autómata con una cinta infinita a derecha (es decir, las celdas van de cero a infinito positivo) con la siguiente aridad:
<math>MT = <Q, \Gamma ,B , \Sigma , \delta ,q_0, F></math>
* <math>Q</math> conjunto de estados
* <math>\Gamma</math> alfabeto de la cinta
* <math>B \in \Gamma</math> símbolo blanco, representa una celda vacía
* <math>\Sigma \subset \Gamma</math> alfabeto de entrada, no incluye al blanco
* <math>\delta : Q \times \Gamma \rightarrow partes(Q \times \Gamma \times \{ L,R\} )</math> acciones
* <math>q_0 \in Q</math> estado inicial
* <math>F \subseteq Q</math> estados finales
Las acciones de la máquina dependen del estado actual y del símbolo que hay bajo la cabeza lectora/escritora, e implican escribir otro símbolo (puede ser el mismo) y moverse a izquierda o derecha.
La configuración instantánea de una máquina de Turing se define como <math>\alpha _1 q \alpha _2</math>, donde <math>\alpha _1</math> es el contenido de la cinta (sucesión de caracteres) a la izquierda del cabezal, ''q'' es el estado actual de la máquina, y <math>\alpha _2</math> es el contenido de la cinta desde el cabezal hasta el último símbolo distinto de blanco. Así, se puede especificar cuál es el estado actual, el contenido de la cinta y la posición del cabezal.
La cinta inicialmente comienza llena de blancos, excepto al comienzo donde tiene escrito el input a reconocer. Notar que el caracter blanco no puede pertenecer al alfabeto de entrada.
La máquina acepta una cadena si en su ejecución llega a un estado final, notar que la máquina no tiene transiciones desde un estado final. Como la cadena está escrita en la cinta, no existe el concepto de consumir la cadena de entrada.
== Máquina de Turing determinística ==
Una máquina de Turing es determinística cuando dado un estado y un símbolo bajo el cabezal existe una única acción. Vale que una máquina determinística puede emular a una no determinística.
Para esto se construye una MTD M' que reconoce la cadena cuando esta pertenece al lenguaje y se cuelga cuando no pertenece. La MTD construida tiene tres cintas (se puede demostrar que una máquina con un número finito de cintas equivale a una de una sola cinta). La idea es guardar en la primer cinta la cadena de entrada, en la segunda un número que simboliza una traza a seguir de la máquina M original, y la tercera usarla para emular las operaciones de M.
Para simbolizar una traza, se calcula el máximo grado de salida (r) de los nodos de la máquina M, se numera cada transición a partir de cada estado con un número de 1 a r, y se escribe una secuencia de dígitos entre 1 y r. Esto permite recorrer todas las posibles secuencias de configuraciones instantáneas en BFS.
La MTD M', entonces, en cada iteración copia la entrada de la primer cinta a la tercera, incrementa en 1 el valor de la segunda cinta (número expresado en base ''r'' que simboliza la traza) y con esa traza emula a M sobre la tercer cinta. Si termina en estado de aceptación, se acepta la cadena. Si se traba o termina en un estado no final, se itera nuevamente.
== Lenguajes Recursivamente Enumerables ==
Los LRE (lenguajes tipo 0 en la jerarquía de Chomsky) son lenguajes reconocibles por una máquina de Turing. Son aquellos que pueden especificarse sin restricciones sobre sus producciones.
=== Gramática a MTND ===
Para pasar de una gramática tipo 0 a una MTND, se utilizan dos cintas. En la primera se guarda la cadena; en la segunda se van generando formas sentenciales de manera no determinística a partir del símbolo distinguido S. Cuando se encuentra alguna que matchea la entrada, se acepta; si no, la máquina se cuelga.
=== MT a Gramática ===
Para pasar de una MT a una gramática se establece una equivalencia entre los símbolos de la gramática y las configuraciones instantáneas de la máquina de Turing. Los símbolos generados son de la forma [a,b], donde ''a'' representará el caracter original de la cadena de entrada y ''b'' el caracter sobre el que opera la máquina.
Se proveen producciones para generar, incialmente, una cadena arbitraria de símbolos [a,a], siendo ''a'' cualquier terminal. Esto equivale a tener inicialmente en la cinta cualquier cadena. Seguidos a estos se genera una cantidad libre de simbolos [lambda,Blanco], tantos como necesitaría la cinta para operar.
La gramática genera, al principio de todo, un caracter ''q'' que representará el cabezal de la máquina. Las producciones de la gramática permiten "mover" ''q'' entre los símbolos [a,b] (modificando solamente los ''b'') en base a las acciones permitidas por la MT original.
Una vez alcanzado un estado final, se generan producciones que eliminan todos los símbolos [a,b] dejando solamente los ''a'' correspondientes a la cadena original, y finalmente a ''q''. Así, la cadena final de terminales es la cadena a generar.
== Lenguajes Sensitivos al Contexto ==
Los lenguajes dependientes del contexto se expresan con gramáticas tipo 1 en la jerarquía de Chomsky, que tienen la restricción de que la longitud del lado derecho de una producción no puede ser menor a la del lado izquierdo.
=== Autómata Linealmente Acotado ===
Los ALA pueden verse como máquinas de Turing con la cinta acotada. En un ALA el alfabeto de entrada incluye dos símbolos, usados como tope de entrada y tope de salida. El autómata no puede moverse más allá de los topes ni sobreescribirlos.
Notar que un ALA tal que en la cinta tenga una cantidad de blancos lineal a la longitud de la entrada es equivalente a un ALA con cero blancos, que opera exclusivamente sobre la cadena de entrada.
A diferencia de lo que sucedía con las MT, no hay equivalencia entre ALA y ALAD. A primera vista puede observarse que el método anterior no funciona pues el número que simboliza la traza a emular (en la segunda cinta) puede crecer arbitrariamente.
=== Gramática a ALA ===
La equivalencia entre una gramática sensitiva al contexto y un ALA se demuestra exactamente igual que para máquinas de Turing en general, excepto que en este caso puede agregarse la restricción de que si la cadena que se está generando excede el tamaño de la que se ha de reconocer se corta esa rama (pues ninguna cadena de terminales y no terminales puede derivar en una de longitud menor). Así la cantidad de posibilidades a explorar es finita.
== Lenguajes Recursivos ==
Los lenguajes recursivos se encuentran estrictamente entre los sensitivos al contexto y los recursivamente enumerables. Son aquellos reconocibles por una HTM (halting Turing machine). Es decir, existe una máquina de Turing que dada cualquier entrada, siempre para y devuelve si una cadena pertenece o no (no puede colgarse).
=== Inclusión de Sensitivos al Contexto ===
Para demostrar que los LSC están incluidos dentro de los recursivos, se construye una HTM que determine si una cadena pertenece al lenguaje. Dada una gramática GSC y una cadena de entrada w de longitud n, se construye un grafo finito donde cada nodo es un string de terminales y no terminales de longitud menor o igual a n.
Los arcos en este grafo representan si es posible ir de un string a otro mediante derivaciones de la gramática. Notar que este grafo es finito y puede construirse mediante un algoritmo.
Luego, para determinar si una cadena ''w'' pertenece al lenguaje, simplemente se verifica mediante un algoritmo si existe un camino desde ''S'' hasta el nodo que contiene a ''w''. Como lo anterior es un algoritmo (siempre termina) existe una HTM que lo ejecuta, con lo cual el lenguaje LSC es recursivo.
=== Lenguaje Recursivo no LSC ===
Para demostrar que existe un lenguaje recursivo no sensitivo al contexto se utiliza un argumento diagonal. Primero se prueba un lema que indica que dada cualquier enumeración de HTMs, existe un lenguaje recursivo que no es aceptado por ninguna de ellas (el lenguaje que dada la cadena ''i'', la acepta sii no es reconocida por la iesima HTM de la enumeración).
Eventualmente se llega a una contradicción, pues si existe una HTM de índice ''i'' en la enumeración, la cadena ''i'' debe ser reconocida por dicha HTM sii no lo es. Notar que este lenguaje es recursivo, pues existe un algoritmo (procedimiento que siempre termina) que puede determinar si una cadena ''i'' pertenece al conjunto: simplemente corre la HTM ''i'' con esa cadena y devuelve la negación.
A partir de esto, se construye una enumeración de las HTM que reconocen todos los LSC, lo cual es posible ya que se pueden enumerar las GSCs. Pero por el lema anterior existe un lenguaje que no es reconocido por ninguna de estas HTMs, es decir, por ningún LSC. Y este lenguaje es recursivo.
La demostración parece basarse en que el conjunto de HTMs no es Recursivamente Enumerable, mientras que el de GSCs sí lo es. Por lo tanto debe existir alguna HTM que genere un lenguaje no sensitivo al contexto.
== Lenguaje Diagonal ==
El lenguaje diagonal es un ejemplo de un lenguaje que no es recursivamente enumerable. Requiere enumerar las MT y entradas posibles y llegar a una contradicción similar a la del problema de la parada.
Más formalmente, se basa en construir una tabla infinita de dos entradas. La celda (i,j) entonces vale 1 sii la máquina de Turing de nro ''j'' reconoce la cadena ''i''. La MT se encuentra codificada en binario, y la cadena de entrada es de 0s y 1s.
Entonces, puede construirse el lenguaje de las cadenas ''i'' tal que no pertenecen a la MT de igual número (lenguaje diagonal). Si este lenguaje es recursivamente enumerable, entonces existe una MT ''Mk'' tal que reconce sus cadenas. En otras palabras,
<math>w_k \in L_d \Longleftrightarrow w_k \not \in L(M_k) = L_d</math>
Con lo que se llega a una contradicción. La cadena de igual número que ''M'' es reconocida por la máquina sii no es reconocida.
Otra opción (distinta a la del pdf, revisar) es un lenguaje que acepta una cadena sii esta representa una máquina de Turing con una entrada dada, y dicha máquina para. Si dicha máquina existiera, resolvería el halting problem, lo que no es posible.
== Lenguaje Universal ==
El lenguaje universal es el que se corresponde a la MT que ejecuta cualquier otra MT con cualquier entrada. En otras palabras, toma pares de cadena y MT, y determina si la cadena es reconocida por esa MT.
'''Recursivamente Enumerable'''
Este lenguaje es recursivamente enumerable. Puede construirse una MT con 3 cintas, de las cuales la primera contiene el input (la MT ''M'' más la cadena de entrada ''w''), la segunda (inicializada con la cadena ''w'') emula la cinta de ''M'', y la tercera permite llevar cuenta del estado en el que se encuentra la ''M'' emulada.
'''No Recursivo'''
Para demostrar que este lenguaje no es recursivo, se supone inicialmente que lo es y se intenta llegar al absurdo. Para esto, se construye un algoritmo (es decir, un procedimiento que siempre para, emulable por una HTM) que dada una cadena de entrada, genera su MT con igual número. Luego se determina, usando la HTM del lenguaje universal (supusimos que era recursivo) si <math>(w_i, MT_i)</math> es aceptado, esto es, si la máquina ''i'' acepta la cadena ''i''.
Notar que este es el complemento del lenguaje diagonal. Como es un algoritmo, siempre termina y devuelve verdadero o falso. Con lo que puede generarse fácilmente una HTM que reconozca el lenguaje diagonal directamente. Lo que es absurdo puesto que no es siquiera recursivamente enumerable.
Intuitivamente, el que el lenguaje universal sea recursivo significaría que es posible tener un método que siempre termina que resuelve (por sí o por no) la pertenencia de cualquier cadena a cualquier MT. Es decir, es capaz de decidir el halting problem.


= Compiladores =
= Compiladores =
Ten en cuenta que todas las contribuciones a Cuba-Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Cuba-Wiki:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)