Está en la página 1de 91

Máquinas de Turing y

Lenguajes Estructurados por


Frases
Teoría de la Computación II
Brookshear Cap. 3
Introducción
• Las MT son máquinas abstractas
• Las MT son más generales (y, por lo tanto, más poderosas) que los AF y los AP que
hemos estudiado
• Estudiaremos el poder computacional de las MT en el contexto de la resolución de
problemas de reconocimiento de lenguajes
• Resultados de este estudio:
• las MT son capaces de aceptar exactamente los mismos lenguajes que pueden generar las
gramáticas menos restrictivas llamadas gramáticas estructuradas por frases
• el poder de procesamiento de lenguajes de las MT está limitado por las mismas fronteras que
limitan los poderes generativos de las gramáticas
• se acepta que la clase de las MT encierra el poder de cualquier proceso computacional (Tesis
de Turing)
• hasta la fecha no hay ninguna máquina que tenga más poder computacional que una MT
• estas limitaciones de los poderes computacionales encontradas, nos servirán de punto de
partida para el estudio de la Computabilidad.
Máquinas de Turing: definición y propiedades básicas

• fueron propuestas por Alan M. Turing en un paper de 1936 “On computable numbers, with
an application to the entscheidungproblem”
• A diferencia de los AF y las AP ya estudiados, las MT:
• pueden mover su cabezal hacia adelante y hacia atrás de la cinta con las cadenas de entrada.
• la cinta es infinita por la derecha y contiene celdas en las que se hay un símbolo para ser leído o un
espacio en blanco.
• el cabezal puede leer y escribir símbolos en las celdas de la cinta
• alternativamente, las MT pueden disponer de más de un cabezal y, por ende, de más de una cinta donde
leer y grabar signos.
• si bien disponen de un mecanismo de control con estados, la diferencia es que entre ese conjunto de
estados posibles, el inicial representa el comienzo de los cálculos a desarrollar y hay un estado especial,
denominado estado de parada que, una vez alcanzado todos los cálculos son detenidos. Aquí hay una
clara diferencia con los AF o los AP quienes disponían de estados de aceptación y de rechazo, pero que
permitían la continuación de los cálculos aunque se alcanzara el estado de aceptación, por ejemplo un AP
de pila vacía.
• el estado inicial y el estado de parada no pueden ser el mismo, por lo tanto una MT tiene, -al menos- dos
estados.
Máquinas de Turing: definición y propiedades básicas
• A diferencia de los AF y las AP ya estudiados, las MT:
• reiteramos, las MT pueden leer y escribir símbolos en su medio de entrada, -esto es, la cinta- y recorrer
esta cinta todo lo que sea necesario en ambos sentidos, hacia la izquierda o hacia la derecha.
• en base a la posibilidad de escribir celdas, las MT pueden usar la cinta como medio de almacenamiento
• así, las MT pueden rastrear los datos de la cinta y modificar determinadas celdas sin afectar a las demás
• las MT disponen de un conjunto finito de símbolos de cinta que utilizan para distinguir porciones de la
cinta, así distinguimos entre el conjunto finito de símbolos denominado alfabeto de la máquina y un
conjunto (mayor y finito) denominado símbolos de cinta que la máquina puede leer y escribir
• el espacio en blanco pertenece a este último conjunto; es un símbolo que está en cualquier celda que
no está ocupada por ningún otro símbolo. Si una MT desea borrar el contenido de una determinada
celda, lo que hace es escribir el espacio en blanco
• para que no existan confusiones con el espacio en blanco, adoptaremos el símbolo ∆ a fin de
representar el espacio en blanco
• las acciones específicas de una MT son: lectura, escritura, mover a la derecha y mover a la izquierda,
-siempre de a una celda de la cinta por vez- y cambiar de estado
• la acción a ejecutar dependerá del símbolo (símbolo actual) contenido en la celda leída (celda actual) y
del estado actual del mecanismo de control
Definición de la MT
¿cómo es la función de transición de una MT?
• usamos Γ (gamma mayúscula) para representar el conjunto de símbolos de cinta
• S es el conjunto de estados
• S’ es el conjunto de estados (S’⊂S) que no son el de parada
• la función de transición se representa de la forma siguiente: δ:(S’ x Γ) → S x (Γ⋃{L, R}), en donde los símbolos L y R no
pertenecen a Γ
• la semántica de esta representación funcional es:
a. δ(p, x) = (q, y) significa “si el estado actual es p y el símbolo actual es x, reemplazar la x con el símbolo y pasar al estado q”
b. δ(p, x) = (q, L) significa “si el estado actual es p y el símbolo actual es x, mover el cabezal una celda a la izquierda y pasar al estrado q”
c. δ(p, x) = (q, R) significa “si el estado actual es p y el símbolo actual es x, mover el cabezal una celda a la derecha y pasar al estado q”.
Estas definiciones nos hablan de que ésta es una máquina determinista. En otras palabras: existe una y sólo una
transición asociada a cada par de (estado, símbolo) donde el estado referido no es el de parada.
IMPORTANTE: normalmente, una MT opera ejecutando sus transiciones hasta llegar al estado de parada, pero bajo
ciertas condiciones, es posible que la MT caiga en un ciclo sin fin y no pueda detenerse nunca. Esta situación será
estudiada más adelante.
Además, puede darse una anomalía y es que el cabezal vaya tanto hacia la izquierda que alcance y sobrepase el extremo
izquierdo de la cinta, con lo cual la MT dejará de efectuar sus cálculos y diremos que la máquina tuvo una terminación
anormal.
Representación de una Máquina de Turing
Diagrama de transiciones de una MT
• los estados están conectados mediante las transiciones y etiquetados con un par de símbolos.
El primero representa el símbolo de la cinta que debe existir para permitir la transición y el
segundo símbolo es el que se escribirá en la celda actual (si es que la transición es una
operación de escritura), o alguno de los símbolos L o R (si es una operación de movimiento)
• así, la transición δ(p, x) = (y, q) está representada por un arco de p a q con la etiqueta x/y
• una transición (p, x) = (q, L) se representa como un arco de p a q con la etiqueta x/L.
• En la figura se presenta un diagrama de transiciones completo para una MT que desplaza su
cabezal hasta encontrar un espacio en blanco. Los símbolos de cinta son {a, b, ∆}
Definición formal de una Máquina de Turing
Una MT es una séxtupla de la forma (S, Σ, Γ, δ, ι, h) en donde
• S es la colección de estados finitos que componen la MT
• Σ es un conjunto finito de símbolos distintos del espacio en blanco, llamado alfabeto de la
máquina.
• es un conjunto finito de símbolos, incluidos los de Σ, que denominamos símbolos de la cinta
de la máquina.
• δ es la función de transición de la máquina.
• ι es un elemento de S llamado estado inicial.
• h es un elemento de S llamado estado de parada.
En ocasiones es necesario contar con una notación concisa que represente la configuración de la cinta
de una MT.
En tales casos representaremos la lista del contenido de la cinta subrayando el símbolo en donde está
actualmente el cabezal. Así, ∆xyz∆∆ representa una cinta que tiene un espacio en blanco, seguido por
los símbolos x, y, z y seguidos por dos espacios en blanco, mientras que el cabezal está sobre la celda
que contiene la z.
Orígenes y propósitos de las Máquinas de Turing

• Turing concibió esta máquina en 1936 con varios propósitos en su mente, entre ellos el poder probar la
veracidad de un postulado de Hilbert, respecto de los sistemas axiomáticos como la aritmética. En
realidad Hilbert había postulado que cualquier sistema axiomático debería cumplir con tres
características: consistencia, completidud y decidibilidad.
• Gödel en 1931 probó, a través de sus dos famosos teoremas que si un sistema era consistente, entonces
no podía ser completo y viceversa.
• Turing buscó la manera de dirimir si también el requerimiento de la decidibilidad podía resolverse. Pero,
poder probar que cada enunciado o teorema matemático concebido o concebible estaba acertado o
equivocado era algo imposible de realizar, de modo que pensó en algún procedimiento mecánico (en su
tiempo y en su contexto, esta expresión significaba algo más de lo que significa para nosotros hoy en día)
que permitiera decidir si un enunciado era correcto o equivocado.
• Concibió, entonces la idea de una máquina abstracta que realizara determinadas operaciones de “cálculo
mecánico” a fin de determinar lo acertado o equivocado de una determinada proposición matemática.
El Entscheidungsproblem (el “problema de la decisión"): décima cuestión de Hilbert de 1900
Con respecto a los problemas de Hilbert presentados por el famoso matemático David Hilbert en 1900, un aspecto del problem #10 estuvo
flotando por casi 30 años antes de que pudiera ser precisamente enmarcado.
La expresión original del 10mo problema de Hilbert era así:
10. Determinación de la solubilidad de una ecuación Diofantina.
Dada una ecuación Diofantina con cualquier número de incógnitas y con coeficientes racionales enteros: Idear un proceso de acuerdo al cual
pueda determinarse, -en una cantidad finita de operaciones- si la ecuación es resoluble en números racionales enteros. El
Entscheidungsproblem (o problema de la decisión en lógica de Primer Orden) es solucionable cuando tenemos un procedimiento que permita,
-para cualquier expresión lógica dada- decidir mediante una cantidad finita de operaciones, su validez o satisfacibilidad... El
Entscheidungsproblem debe ser considerado el principal problema de la Lógica Matemática.
— citado, con esta traducción y el original en alemán en el libro de Dershowitz y Gurevich, 2008

Para 1922, la noción del "Entscheidungsproblem" se había desarrollado un poco y H. Behmann establecía que ... La forma más general del
Entscheidungsproblem [es] como sigue a continuación:
Para permitirnos decidir en una cantidad finita de pasos la verdad o falsedad de una afirmación puramente lógica, se necesita una
prescripción muy definida y de aplicación general ...
—Gandy p. 57, citando a Behmann

Behmann remarca que ... El problema general es equivalenteal problema de decidir cuáles proposiciones matemáticas son verdaderas (y
cuáles no).
—íbid.
Si pudiéramos resolver el Entscheidungsproblem entonces podríamos disponer de un "procedimiento para solucionar muchos (sino todos) los
problemas matemáticos".
—íbid., p. 92

By the 1928 international congress of mathematicians, Hilbert "made his questions quite precise. First, was mathematics complete ... Second,
was mathematics consistent ... And thirdly, was mathematics decidable?"
(Hodges p. 91, Hawking p. 1121). The first two questions were answered in 1930 by Kurt Gödel at the very same meeting where Hilbert
delivered his retirement speech (much to the chagrin of Hilbert); the third—the Entscheidungsproblem—had to wait until the mid-1930s.
The Entscheidungsproblem (the "decision problem"): Hilbert's tenth question of 1900

The problem was that an answer first required a precise definition of "definite general applicable
prescription", which Princeton professor Alonzo Church would come to call "effective calculability", and in 1928
no such definition existed. But over the next 6–7 years Emil Post developed his definition of a worker moving from
room to room writing and erasing marks per a list of instructions (Post 1936), as did Church and his two students
Stephen Kleene and J. B. Rosser by use of Church's lambda-calculus and Gödel's recursion theory (1934).
Church's paper (published 15 April 1936) showed that the Entscheidungsproblem was indeed "undecidable" and
beat Turing to the punch by almost a year (Turing's paper submitted 28 May 1936, published January 1937). In the
meantime, Emil Post submitted a brief paper in the fall of 1936, so Turing at least had priority over Post. While
Church refereed Turing's paper, Turing had time to study Church's paper and add an Appendix where he sketched
a proof that Church's lambda-calculus and his machines would compute the same functions.
But what Church had done was something rather different, and in a certain sense weaker. ... the Turing construction
was more direct, and provided an argument from first principles, closing the gap in Church's demonstration.
—Hodges p. 112
And Post had only proposed a definition of calculability and criticized Church's "definition", but had proved nothing.
Alan Turing's a- (automatic-)machine
In the spring of 1935, Turing as a young Master's student at King's College Cambridge, UK, took on the challenge; he had been stimulated by the
lectures of the logician M. H. A. Newman "and learned from them of Gödel's work and the Entscheidungsproblem ... Newman used the word
'mechanical' ... In his obituary of Turing 1955 Newman writes:
To the question 'what is a "mechanical" process?' Turing returned the characteristic answer 'Something that can be done by a machine' and he
embarked on the highly congenial task of analysing the general notion of a computing machine.
—Gandy, p. 74
Gandy states that:
I suppose, but do not know, that Turing, right from the start of his work, had as his goal a proof of the undecidability of the
Entscheidungsproblem. He told me that the 'main idea' of the paper came to him when he was lying in Grantchester meadows in the summer of
1935. The 'main idea' might have either been his analysis of computation or his realization that there was a universal machine, and so a diagonal
argument to prove unsolvability.
—ibid., p. 76
While Gandy believed that Newman's statement above is "misleading", this opinion is not shared by all. Turing had a lifelong interest in
machines: "Alan had dreamt of inventing typewriters as a boy; [his mother] Mrs. Turing had a typewriter; and he could well have begun by asking
himself what was meant by calling a typewriter 'mechanical'" (Hodges p. 96). While at Princeton pursuing his PhD, Turing built a Boolean-logic
multiplier (see below). His PhD thesis, titled "Systems of Logic Based on Ordinals", contains the following definition of "a computable function":
It was stated above that 'a function is effectively calculable if its values can be found by some purely mechanical process'. We may take this
statement literally, understanding by a purely mechanical process one which could be carried out by a machine. It is possible to give a
mathematical description, in a certain normal form, of the structures of these machines. The development of these ideas leads to the author's
definition of a computable function, and to an identification of computability with effective calculability. It is not difficult, though somewhat
laborious, to prove that these three definitions [the 3rd is the λ-calculus] are equivalent.
—Turing (1939) in The Undecidable, p. 160
Alan Turing's a- (automatic-)machine

When Turing returned to the UK he ultimately became jointly responsible for breaking the German secret
codes created by encryption machines called "The Enigma"; he also became involved in the design of the
ACE (Automatic Computing Engine), "[Turing's] ACE proposal was effectively self-contained, and its roots
lay not in the EDVAC [the USA's initiative], but in his own universal machine" (Hodges p. 318). Arguments
still continue concerning the origin and nature of what has been named by Kleene (1952) Turing's Thesis.
But what Turing did prove with his computational-machine model appears in his paper On Computable
Numbers, With an Application to the Entscheidungsproblem (1937):
[that] the Hilbert Entscheidungsproblem can have no solution ... I propose, therefore to show that there can
be no general process for determining whether a given formula U of the functional calculus K is provable,
i.e. that there can be no machine which, supplied with any one U of these formulae, will eventually say
whether U is provable.
—from Turing's paper as reprinted in The Undecidable, p. 145
Turing's example (his second proof): If one is to ask for a general procedure to tell us: "Does this machine
ever print 0", the question is "undecidable".
Orígenes y propósitos de las Máquinas de Turing
• consistente o coherente: Un sistema axiomático es consistente cuando no es posible
derivar una contradicción a partir de sus axiomas. Decimos por el contrario que un
sistema es inconsistente si es posible probar en este sistema como teorema una
fórmula cualquiera y su negación. Como a partir de premisas inconsistentes se puede
deducir cualquier conclusión, un sistema inconsistente carece de utilidad para la
ciencia puesto que en todas sus interpretaciones, habrá enunciados falsos.
• completo: Un sistema axiomático es completo si no es posible añadirle axiomas
nuevos sin que el sistema en cuestión se convierta en inconsistente. Esta propiedad es
muy difícil de demostrar.
• decidible: se refiere a la existencia de un método efectivo para determinar si un objeto
es miembro de un conjunto de fórmulas.
• El último postulado, llamado el “problema de la decidibilidad” o Entscheidungproblem,
-como lo denominó Hilbert- restaba de ser comprobado y Turing lo logra en su trabajo
“On computable numbers with an application to the Entscheidungsproblem” de 1936.
Orígenes y propósitos de las Máquinas de Turing
Es necesario hacer la aclaración de que el primer autómata que existió fue la Máquina de Turing. Nosotros hemos estudiado otros
modelos de computación como los AFD, AFND y el AP, pero éstos existieron, -cronológicamente- después de la MT, ya que fueron
modelos más simples que permitían un enfoque didáctico mejor. Estas máquinas se desarrollaron en los años ‘60.
Por lo tanto, los orígenes y propósitos de la MT es totalmente diferente de los autómatas estudiado. La MT fue concebida para
poder TODO el poder de los procesos computacionales. Dicho de otra manera: Turing buscó desarrollar un sistema en el que fuera
posible modelar cualquier proceso que pudiera considerarse como un cálculo.
Esto sucedió en 1936, mucho antes que existiera cualquier maquinaria computacional como la actual. Turing pensaba en cálculos
que podían realizar seres humanos con papel y lápiz. Así, Turing sabía que las personas sólo podían concentrarse, -en un
momento dado- en una porción restringida del papel y que esa colección de marcas en el papel podrían considerarse como un
único símbolo.
En base a esto, Turing llegó a la conclusión de que cualquier proceso computacional sólo podía necesitar una cantidad finita de
símbolos perfectamente distinguibles.
Paralelamente, Turing consideró que la persona calculando pasaría por una serie de estados, desde uno especial al inicio de los
cálculos, pasando por otros a medida que fuera completando los resultados parciales y, eventualmente llegaría hasta un estado
final de parada al completar todos sus cálculos.
Es muy significativo que, -hasta la fecha- nadie en el mundo haya podido producir un modelo computacional que fuera
ampliamente aceptado y que supere el poder del modelo de Turing.
Este modelo es tan poderoso y general que supera a las computadoras actuales, ya que una MT nunca se verá restringida por
problemas de falta memoria (cinta semiinfinita) cosa que si ocurre en las computadoras reales.
En base a esto es que se acepta la llamada Tesis de Turing, que dice que:
El poder computacional de una máquina de Turing es tan grande como el de cualquier sistema computacional posible.
Orígenes y propósitos de las Máquinas de Turing

Esta tesis de Turing tiene importantísimas implicaciones en la Computabilidad, puesto


que para resolver cualquier problema mediante una computadora es necesario
desarrollar un proceso computacional (en definitiva: un algoritmo) que pueda
resolver el problema.
Actualmente, un proceso computacional se desarrolla sobre una maquinaria
(hardware) que ejecuta instrucciones estandarizadas (software) y dispuestas de tal
manera que permitan la solución de un problema (algoritmo codificado).
Tanto el hardware como el software concebidos para la resolución del problema,
responden a una lógica cuyas raíces se asientan en la Máquina de Turing. Podemos
afirmar que hay una relación directa entre las MT y los lenguajes de programación, así
como también en la concepción del hardware de las máquina actuales; de allí la
importancia fundamental del estudio de este modelo de computación.
3.2 Construcción modular de
Máquinas de Turing
Teoría de Computación II. Brookshear Cap. 3
Máquinas de Turing y Lenguajes Estructurados por Frases
Construcción de MT’s por módulos o bloques

Dejaremos de lado por un momento nuestro propósito primordial, -que es


estudiar a las MT’s como aceptadoras de lenguajes- a fin de conocer en
profundidad estas máquinas. El objetivo es poder construir MT’s complejas
a partir de bloque más elementales.
Este enfoque nos ayudará a comprender y construir las máquinas más
complejas que estudiaremos más adelante.
Combinación de Máquinas de Turing
Si bien estamos diciendo que combinaremos MT’s elementales para formar MT complejas, en realidad la
estrategia es combinar los programas de las MT’s de manera semejante a como combinamos módulos de
programación para desarrollar un sistema de software de mayores dimensiones.
Por ello es que representaremos las MT’s mediante diagramas de transición y los combinaremos como hicimos
con los AF.
Supongamos tener dos MT, M1 y M2 con diagramas de transición T1 y T2 respectivamente y símbolos de cinta del
conjunto Γ. Si quisiéramos desarrollar un diagrama de transiciones para una máquina que simule las actividades
de M1 seguidas de las de M2, deberíamos eliminar la función de parada del estado de parada del diagrama T 1,
eliminar la característica de inicial del estado inicial del diagrama T2 y luego poner una transición x/x para cada x
en Γ, del antiguo estado de parada de T1 al antiguo estado inicial de T2.
Obviamente, obtendremos el resultado esperado, aunque nos encontraríamos con varias desventajas, por
ejemplo:
• podríamos introducir gran cantidad de transiciones que serían simples reescrituras del contenido de la celda, lo cual
aumentaría la complejidad computacional inútilmente;
• si queremos que la máquina se detenga luego de simular M1, salvo que el símbolo actual sea z, porque de ser así, queremos
que simule ahora a la M2;
• supongamos que si combinamos más de dos diagramas, y queremos controlar el paso de uno a otro dependiendo del valor
del símbolo actualmente leído cuando llega a cada uno de los antiguos estados de parada;
en todos estos casos (y otros posibles) deberemos disponer de enlaces más complicados entre los diagramas Tn.
Combinación de Máquinas de Turing
Entonces, si necesitamos combinar los diagramas de transición de varias MT’s para simular
la combinación delas máquinas originales, deberemos realizar el siguiente procedimiento:
1. eliminamos la característica de inicio de los estados iniciales de todas las máquinas,
excepto la del diagrama que comenzará en la máquina compuesta.
2. eliminamos la característica de detención de los estados de parada de todas las
máquinas y generamos un nuevo estado de parada que no se encuentre en ninguno de
los diagramas de transición de las máquinas que vamos a combinar.
3. para cada uno de los antiguos estados de parada p y cada x en el lenguaje Γ,
dibujamos un arco de la siguiente forma:
a. si la máquina compuesta debe detenerse al llegar a p con el símbolo actual x, entonces dibujamos
un arco con la etiqueta x/x de p al nuevo estado de parada.
b. si al llegar al estado p con el símbolo actual x, la máquina compuesta debe transferir el control a
la máquina M =(S, Σ, Γ, δ, ι, h), entonces dibujamos un arco con etiqueta x/z de p al estado q de
M, donde δ(ι, x) = (q, z).
Veamos un ejemplo en la Fig 3.3 siguiente:
Como podemos apreciar, esta construcción modular se parece un poco al paradigma de
programación de objetos, donde no hacemos énfasis en los detalles interiores cuando
conocemos perfectamente la manera en que trabajan cada una de las partes componentes y
así restamos complejidad al diagrama final.
Bloques

A estos diagramas de bloques los podemos representar como un nodo con flechas entre los nodos para
indicar las transiciones entre los bloques. Estas flechas se etiquetarán de acuerdo con el valor que debe
aparecer en la celda actual para que recorra la flecha. Es decir, si una flecha del nodo A al nodo B tiene una
etiqueta x, entonces la ejecución se transferirá ala máquina B si A llega a su ex estado de parada con una x
en la celda actual.
Como con los diagramas de transiciones, debe indicarse con una flecha el nodo del diagrama compuesto
desde donde comienza la ejecución. Por ejemplo la máquina que desarrollamos en la Fig 3.3 podría
resumirse con el diagrama compuesto siguiente:
el nodo A representa la máquina que mueve su cabezal a una celda a la derecha , B representa la
máquina que busca una x y C la máquina que busca una y.
x
B Por conveniencia hay varias abreviaturas en cuanto a la notación usada en los diagramas compuestos
de MT’s:
A • Una de estas abreviaturas es reemplazar varias flechas de idéntico origen y destino por una sola
etiquetada con la lista de símbolos que se aplican.
C • Otra es utilizar el símbolo ¬ (usado como negador o complemento en Lógica) para simbolizar
y transiciones que no incluyen al símbolo que niega, por ejemplo si tenemos ¬x, significa que por esa
transición pasarán todos los símbolos que no sean x, como y o z, o lo que corresponda.
• Otra abreviatura es la flecha sin etiqueta que identifica una transición que se recorre sin importar el
valor de la celda actual, También puede eliminarse la flecha y poner los nombres de los nodos uno a
continuación del otro, como por ejemplo →A → B → C se reemplaza por → ABC
Ejemplos de abreviaturas de notación de MTs
• La máquina de la Fig. 3.4 a simula las acciones de M1 hasta donde normalmente se detendría y hace una
transferencia para simular a M2.
• La Fig 3.4 b representa una máquina que simula M1 y hace la transferencia a M2 sólo si la celda actual
contiene una x; de lo contrario se detiene al finalizar M1.
• La Fig. 3.4 c representa una máquina compuesta que simula M1 y luego elige simular M2 o M3 dependiendo si
el símbolo actual es x o no es x.
Ejemplos de abreviaturas de notación de MTs
Otra abreviatura es la notación -vista a continuación- para indicar que cuando el símbolo actual
es x, y o z, la máquina deberá proseguir en esa dirección, donde ω representa el símbolo que
en realidad está presente. Esta notación se usa para no saturar el diagrama con rutinas
similares, -aunque separadas- para cada uno de los símbolos x, y o z. Para no hacer eso, se
presenta una rutina genérica que trabaja con el símbolo ω de manera similar a como un
subprograma presenta una rutina genérica en términos de parámetros formales.

Así, si la máquina mostrada a continuación fuera a llegar al anterior estado de parada de


M1 con el actual símbolo x o y, continuaría con la ejecución de M2; esto llevaría al anterior
estado de parada de M2 con el mismo símbolo actual que tenía al entrar a M2, y luego la
ejecución regresaría a M1.
Bloques de construcción básicos (1)
Veremos ahora las MT elementales que usaremos en la construcción de máquinas
más complejas.
Dado que las actividades disponibles para una MT son:
1. Mover el cabezal una celda a la derecha,
2. Mover el cabezal una celda a la izquierda, y
3. Escribir un símbolo en la celda actual.
entonces, si construimos máquinas individuales que realicen estas tareas simples,
cualquier MT no será otra cosa que una composición de estas MTs elementales o
bloques, como las llamaremos de aquí en adelante.
A continuación, los diagramas de transición de las MT que efectúan estas actividades
simples, suponiendo que los símbolos de cinta son x, y y Δ.

Si representamos con R a la máquina que mueve el cabezal a la derecha, con L la que


lo mueve a la izquierda y con x la máquina que escribe un símbolo en la celda actual,
una MT que se mueve a la derecha, escribe el símbolo y, se mueve una celda a la
izquierda y se detiene, se representa con el diagrama compuesto siguiente:
Bloques de construcción básicos (2)
Veremos ahora unas máquinas levemente más complejas. Empezaremos con máquinas que realizan búsquedas de
un determinado símbolo.
Entonces:
1. Para cualquier símbolo x la máquina Rx recorre la cinta hacia la derecha desde la posición inicial hasta
encontrar ese símbolo x y si ni lo encuentra seguirá así por la eternidad.
2. De manera similar, la máquina R¬x buscará hacia la derecha de la posición inicial cualquier símbolo que no sea
x. Las máquinas Lx y L¬x hacen lo propio, pero hacia la izquierda. A diferencia de la anterior, éstas podrían
generar una terminación anormal si, -en su búsqueda hacia la izquierda- llegan al extremo izquierdo de la cinta
y lo pasan.
3. Las máquinas RΔ, R¬Δ, LΔ, L¬Δ tendrán utilidad especial porque pueden usarse para construir máquinas
compuestas que busquen celdas en blanco o que no estén en blanco.
Bloques de construcción básicos (3)
Otra colección de máquinas útiles son las ejecutan desplazamientos:
• La SR desplaza una celda a la derecha la cadena de símbolos que no están en blanco y que se encuentran a la izquierda
de la celda actual (o sea, mueve el cabezal a la izquierda). Así, si la cinta tuviera la configuración inicial ΔxyyxxΔΔΔΔ…,
entonces SR se detendría con la cinta configurada como ΔΔxyyxΔΔΔ… ; o si se aplicara a ΔyxyΔΔxxyΔΔ…, SR produciría
ΔΔyxyΔxxyΔΔ…. Como caso especial, si la celda izquierda de la actual tiene un espacio en blanco, SR únicamente borraría
la celda actual. Así, SR convertiría la configuración xyΔyxΔΔΔ… de la cinta en xyΔΔxΔΔΔ…
• La SL, -de forma similar- desplaza hacia la izquierda. Si la cinta de SL tuviera la configuración inicial ΔxyyxxΔΔΔ…,
entonces SL se detendría con su cinta configurada como ΔyyxxΔΔΔΔ…, o si se aplicara a ΔyxyΔΔxxyΔΔ…, SL produciría
ΔyxyΔxxyΔΔΔ…
Bloques de construcción básicos (4): Ejemplos 1
La Fig.3.8 es una máquina copiadora que transforma un patrón de la forma ΔwΔ, a la forma ΔwΔwΔ,donde w es cualquier
cadena (de hasta de longitud cero) de símbolos que no son espacios en blanco.

La Fig.3.9 es una máquina que supone que su entrada representa un entero positivo en notación binaria y reduce en uno el valor
representado (la orden SUB, o x = x - 1).
Bloques de construcción básicos (5): Ejemplos 2
La Fig.3.10 es una máquina que transforma cadenas del alfabeto {x, y, z}. Si iniciamos la máquina con la configuración de
cinta Δw1Δ Δ Δ…, donde w1 es una cadena en {x, y, z}*, entonces la máquina se detendrá con la cinta configurada como
Δw2ΔΔΔ…, donde w2 es la cadena que sigue a w1 en la secuencia λ, x, y, z, xx, yz, zx, xy, yy, zy, xz, yz, zz, xxx, yxx, … Más
adelante veremos la utilidad de esta máquina como bloque de construcción.
Realizar los ejercicios 1, 2, 3 y 4 de la sección
3.2 del Brookshear
3.3 Máquinas de Turing como aceptadoras
de lenguajes

Teoría de la Computación II. Brookshear Cap. 3


Máquinas de Turing y Lenguajes Estructurados por Frases
Introducción

Hemos estudiado a los autómatas, -fundamentalmente- como


aceptadores de lenguajes y los utilizamos para evaluar cadenas de
símbolos y así determinar su pertenencia o no a un determinado
lenguaje. Por lo tanto, ahora estudiaremos a las Máquinas de Turing
desde esta perspectiva, es decir cómo una MT acepta cadenas.
Procedimientos de evaluación de cadenas
Para evaluar una cadena de símbolos de algún alfabeto con una MT, registramos la cadena en la cinta
(de otra manera sería una sucesión de espacios en blanco) de la máquina, comenzando por la segunda
celda. De esta manera, si queremos evaluar la cadena xxyy, la cinta aparecerá así: ∆xxyy∆∆∆…
Luego colocamos el cabezal de la MT en la celda del extremo izquierdo y ponemos la máquina en
marcha a partir de su estado inicial como se ve en la fig. 3.11.
Decimos que la máquina acepta la cadena si, a partir de esta configuración inicial, encuentra un
camino hasta su estado de detención o parada.
Procedimientos de evaluación de cadenas
La fig. 3.12 es importante para nuestro estudio, pues está mostrando que las máquinas de Turing son capaces de
aceptar lenguajes que no aceptan los Autómatas de Pila, ya que recordamos que L = L(M) = {xnynzn | n ∈ ℕ} no es un
Lenguaje Independiente del Contexto.
Más adelante, encontraremos que la clase de los lenguajes aceptados por las máquinas de Turing contiene
propiamente todos los lenguajes independientes del contexto.
Procedimientos de evaluación de cadenas
Hemos definido la aceptación de cadenas por parte de las MT de igual manera que hacíamos con los autómatas previamente
estudiados, pero encontraremos que, -en ciertas ocasiones- será conveniente requerir que una MT escriba un mensaje de
aceptación antes de detenerse. Por ejemplo, podríamos requerir que una MT acepte una cadena si se detiene con su cinta en
la configuración ∆Y∆∆∆…, donde el símbolo Y se usa para representar la respuesta afirmativa (Yes) y, -en tales
circunstancias- no se considerará aceptación si la MT se detiene con cualquier otra configuración de la cinta.
Este criterio adicional no afecta la clase de lenguajes que pueden aceptar las MT. Entonces:
Dada una máquina de Turing M que acepte las cadenas con sólo detenerse, existe otra máquina de Turing M’ que acepta las
mismas cadenas si se detiene con la cinta configurada como ∆Y∆∆∆…,y viceversa.
Para justificar esta afirmación, consideremos una máquina de Turing M que acepte cadenas con sólo detenerse y luego
mostraremos que podemos modificarla para que acepte las mismas cadenas si se detiene con una configuración de cinta de
la forma ∆Y∆∆∆….
Básicamente, lo que hay que hacer es modificar M para que controle esa porción de la cinta que altera (modifica) durante la
ejecución. Luego, al finalizar los cálculos normales, podrá borrar esa porción de la cinta y escribir el mensaje adecuado en la
cinta antes de detenerse.
Ahora bien, para poder controlar esa porción alterada de la cinta, debemos utilizar ciertos símbolos especiales de la cinta: # y
*.
El símbolo # se usará para marcar el extremo izquierdo de la cinta a fin de advertir a la MT que no intente leer la cinta más a
la izquierda de dicho símbolo, porque si lo hace tendrá una terminación anormal. El símbolo * servirá para marcar el extremo
derecho de la porción de cinta que alteramos durante la ejecución. Podemos apreciar que estos símbolos nuevos de la cinta
nos permiten encasillar el accionar de la MT sobre la cinta.
Procedimientos de evaluación de cadenas
Así, la máquina modificada deberá comenzar cualquier cálculo con →R∆SRR*L∆L#R.
Esto es:
1. desplazarse hacia el extremo derecho de la cinta de entrada y desplazar la cadena una celda a la derecha.
2. luego marcar la primera celda a la derecha de la entrada con el símbolo *,
3. regresar a la celda izquierda de la cinta y escribir el símbolo #,
4. luego ubicar el cabezal sobre el espacio en blanco en el extremo izquierdo de la cadena de entrada.
En resumen:
dada la configuración inicial ∆w∆∆…, donde w es la cadena de símbolos de entrada, la máquina de Turing produce la
configuración #∆w*∆∆….
A partir de esta configuración, la máquina de Turing modificada debe continuar la simulación de las acciones de la M original.
No obstante, al efectuar la simulación, la máquina deberá estar pendiente de la ocurrencia de dos circunstancias especiales:
• si el símbolo # se convirtiera en el símbolo actual (o sea, si lo leyera de la cinta) significaría que el proceso que está simulando
ha tenido una terminación anormal, al intentar leer una celda que está más allá del extremo izquierdo de la cinta. Para poder
simular plenamente esto, la máquina moverá su cabezal una celda más a la izquierda y terminará anormalmente.
• si el símbolo * se convirtiera en al símbolo actual. Esto indicaría que el cálculo simulado ha movido el cabezal hacia la
derecha, hasta llegar a una celda que no había alterado antes. En este caso, la máquina modificada debe “empujar” la marca
* una celda más a la derecha ejecutando →R*L∆ antes de continuar con la simulación.
Procedimientos de evaluación de cadenas
Luego de haber simulado los cálculos de M hasta llegar al estado de parada. la máquina modificada deberá borrar su
cinta y escribir el mensaje Y antes de detenerse. Esto se logra agregando el bloque que se muestra a continuación.

Finalmente, la máquina modificada completa es:

donde M0 es la máquina que simula M, excepto por las dos circunstancias especiales en las cuales surge # ó * como el símbolo actual.
Procedimientos de evaluación de cadenas
Pensemos ahora al revés. Supongamos que tenemos una máquina de Turing M’ que acepta cadenas deteniéndose con
la cinta configurada como ∆Y∆∆∆….
Entonces podríamos alterar esta máquina para obtener otra que no se detuviera en ningún otro caso. Lo único que
requiere es insistir en que la máquina revise su cinta en busca de la configuración ∆Y∆∆∆… antes de detenerse.
Para lograr esto, construimos otra máquina que marque los extremos izquierdo y derecho de la cinta de la forma antes
descrita; luego simule las acciones de M’ tomando en cuenta la ocurrencia de # o * como símbolo actual; y por último,
si la simulación llega hasta el estado de parada original, confirme que la porción de la cinta limitada por las marcas # y
* esté configurada como #∆ Y∆∆…∆ ∆* antes de detenerse.
Este último paso podría lograrse con una rutina como la siguiente:

Conclusión: podemos establecer varias maneras de que una MT acepte sus cadenas de entrada, ya sea permitiendo que se
detengan ú obligándolas a que respondan con un mensaje de aceptación. Ambas estrategias tienen ventajas y desventajas,
pero como tienen el mismo poder, podemos elegir el método que más nos convenga. No obstante, supondremos que una MT
acepta sus cadenas con sólo detenerse, a menos que se especifique lo contrario.
Máquinas de Turing de varias
cintas
Máquinas de Turing multicintas
Es posible configurar MT que dispongan de más de una cinta. A éstas máquinas se las conoce como máquinas de Turing
de k-cintas, con k entero positivo.
Cada una de estas cintas tiene su extremo izquierdo propio, se extiende infinitamente por la derecha y el acceso a su
contenido se logra a través de varios cabezales de lectura y escritura(uno por cinta).
La transición que se ejecute en un instante dado, dependerá de la colección de símbolos presentes en estos cabezales y
del estado actual/interior de la máquina.
La acción de una sola transición afecta sólo a una de las cintas de la máquina. Estas acciones incluyen:
1. escribir en la celda actual de su cinta,
2. mover el cabezal correspondiente una celda a la izquierda o,
3. mover el cabezal una celda a la derecha.
Para evaluar la aceptación de una cadena de símbolos por parte de una MT de varias cintas, comenzaremos con la
máquina en su estado inicial y con la cadena de entrada registrada en la primera cinta, mientras que todas las restantes
cintas están en blanco, con los cabezales posicionados en la celda del extremo izquierdo de sus cintas.
Entonces: la cadena es aceptada si, -a partir de esta configuración inicial- la máquina se detiene.
Aunque estemos tentados de pensar que una MT de varias cintas tiene un poder de procesamiento de lenguajes mayor
que las MT de cinta única, comprobaremos que no es así; cualquier MT de varias cintas puede ser simulada con una MT
de una única cinta, como veremos en el teorema siguiente.
Dicho de otra forma; aunque en ocasiones nos convenga usar una MT de varias cintas, esta máquina no podrá aceptar
más lenguajes que una MT convencional de cinta única.
Máquinas de Turing multicintas

Teorema 3.1
Por cada máquina de Turing de varias cintas M, habrá una máquina de
Turing convencional de una sola cinta M’ tal que L(M) = L(M’).
Demostración
Suponemos que M es una máquina de Turing de k-cintas que acepta el lenguaje L.
Mostraremos que existe la posibilidad de representar el contenido de las k cintas en
una sola, de modo que las acciones de M pueden ser simuladas perfectamente en una
máquina M’ de cinta única.
Veamos…
Máquinas de Turing multicintas
En la figura 3.13 a vemos las cintas de M colocadas en paralelo con sus extremos
izquierdos alineados y la posición de sus correspondientes cabezales está
representada por las flechas verticales. Basados en esta representación, veremos
que es posible representar el contenido de las k cintas y las posiciones de sus
respectivos cabezales en una tabla que contiene 2k filas y una cantidad ilimitada
de columnas que se extienden hacia la derecha como se ve en la fig. 3.13 b.
Las filas impares de esta tabla representan las cintas; las pares se usan para
indicar la posición del cabezal de la cinta de la fila superior, lo cual se logra
colocando un 1 en la columna asociada con la celda actual y dejando las demás
en blanco.
Cada una de las columnas de la tabla es, -en esencia- una 2k-tupla y los
componentes impares, símbolos de cinta de M y los pares elementos del
conjunto {∆, 1}. Por lo tanto, existe sólo una cantidad finita de combinaciones
distintas de símbolos que pueden aparecer en las columnas. Esto quiere decir
que podemos asignar un nuevo símbolo de cinta (único) a cada una de las 2k-
tuplas posibles y luego representar toda la tabla como una cadena infinita de
estos nuevos símbolos.
De esta manera podemos almacenar en una sola cinta toda la información que
contienen las k cintas de la máquina. Aunque cada una de las celdas de la cinta
única contiene sólo un símbolo, éste representa una 2k-tupla.
Es conveniente expresarlo como si la cinta contuviera dicha tupla, en vez del
símbolo que la representa. Adoptaremos esto informalmente.
Máquinas de Turing multicintas

Veremos ahora cómo una MT convencional M’ puede aceptar el mismo


lenguaje que una máquina M de k cintas.
Los alfabetos de M y M’ son los mismos, pero la colección de símbolos de
cinta de M’ son los símbolos de cinta de M, un símbolo para cada 2k-tupla
posible y un símbolo # que se usa de marca especial.
Para evaluar una cadena, M’ comienza con su única cinta como un duplicado
exacto de la cinta 1 de la máquina M.
Máquinas de Turing multicintas
La primera tarea de M’ es traducir el contenido de su cinta a un formato que pueda
representar las k cintas de M. Para lograrlo, M’ ejecutará los siguiente pasos:
A1. Desplaza el contenido de la cinta una celda a la derecha mediante →R∆SRL∆. El
cabezal quedará en la segunda celda de la cinta.
A2. mueve el cabezal una celda a la izquierda (extremo izquierdo de la cinta),
escribe el símbolo # como marca de fin de cinta y luego mueve el cabezal a la
derecha una celda.
A3. Repite los siguientes pasos hasta que el símbolo reemplazado en el paso b sea
un espacio en blanco.
a. mueve el cabezal de la cinta una celda a la derecha.
b. reemplaza el símbolo actual (digamos, x) con el símbolo de la cinta que
representa a la tupla (x, ∆, ∆, ∆, …, ∆, ∆).
A4. ejecuta L∆, lo cual moverá el cabezal de regreso a la segunda celda de la cinta.
Sustituye el espacio en blanco de esta celda con el símbolo de cinta que representa
a la tupla (∆, 1, ∆, 1, …, ∆, 1).
Máquinas de Turing multicintas

Luego de ejecutar esos pasos, M’ ha traducido su cinta a un formato de cintas múltiples, marcando el extremo
izquierdo de la cinta con # y devuelto su cabezal a la tupla que representa las celdas del extremo izquierdo de
las k cintas de M. Ahora M’ debe simular a M hasta que M se detenga o termine anormalmente.
Para simular una transición de M, se necesitará efectuar una serie de pasos en M’. Diseñamos a M’ de tal
manera que cada secuencia de pasos comience en un estado especial, -denominado estado compuesto- que
refleje el estado actual de M así como la colección de k símbolos de las celdas actuales de las cintas de M. De
esta manera, cada estado compuesto es conceptualmente una K+1-tupla, donde el primer componente es un
estado de M, y los restantes son símbolos del alfabeto de M.
Máquinas de Turing multicintas
M’ se construye para que, al hallarse en el estado compuesto (p, x1, x2, …, xk) corresponda a que M se
encuentre en el estado p con los símbolos actuales x1, x2, …, xk en sus cabezales. a partir de este estado, M’
ejecutará una secuencia de pasos diseñados para simular cada transición que ejecutaría M en la situación
correspondiente (tener en cuenta que esta transición es determinada en forma única por el estado compuesto.
Así, la decisión de cuál será la siguiente transición que se ejecute no se realiza dinámicamente durante el
proceso de simulación, sino que se determina ANTES de la ejecución; esto es, durante la construcción de la
máquina). Una vez que se ha ejecutado la secuencia de simulación de la transición, M’ se desplazará al estado
compuesto que corresponda a la situación donde se encontraría M después de ejecutar la transición
individual.
Para determinar cómo es este proceso de simulación, refinamos el paso A4 para que deje a M’ en el estado
compuesto que representa la k+1-tupla (ι, ∆, ∆, …, ∆) donde ι es el estado inicial de M.
Así, después de terminar con el paso A4, M’ se hallará en el estado compuesto asociado al estado inicial y a los
símbolos actuales de M, dispuesta a iniciar el proceso de reconocimiento de la cadena.

A4.ejecuta
A4. ejecutaLL∆∆,,lolocual
cualmoverá
moveráelelcabezal
cabezalde
deregreso
regresoaalalasegunda
segundacelda
celdadedelalacinta.
cinta.Sustituye
Sustituyeelelespacio
espacioen
en
blancode
blanco deesta
estaceldaceldacon
conelelsímbolo
símbolode
decinta
cintaque
querepresenta
representaaalalatupla
tupla(∆,
(∆,1,
1,∆,∆,1,1,…, ∆,1).
…,∆, 1).
Máquinas de Turing multicintas
Para simular la ejecución de la transición de M, M’ se ejecutan los pasos B1 a B3, donde
empleamos la notación jτ para representar el número de la cinta que se vería afectada por la
transición τ (recordemos que una transición de la MT de varias cintas afecta sólo a una de las
cintas de la máquina).
B1. Mueve la cabeza a la derecha hasta que el componente 2jτ de la tupla en la celda actual sea
1 (es decir, encuentra la posición de la cabeza asociada con la cinta jτ.
B2. a. Si la transición τ es una operación de escritura, entonces modifica el componente 2jτ – 1
según se indique.
b. Si la transición τ es un movimiento hacia la derecha, reemplaza con un espacio en blanco
al 1 del componente 2jτ de la celda actual, mueve la cabeza una celda a la derecha y cambia
de espacio en blanco a 1 el componente 2jτ de la tupla que allí se encuentra (si en lugar de
una tupla detecta un espacio en blanco al moverse a la derecha, reemplaza éste con la 2K-
tupla (∆, ∆, ∆, ∆,…, ∆, ∆) antes de escribir el 1).
c. Si la transición τ es un movimiento hacia la izquierda, reemplaza con un espacio en blanco
el 1 del componente 2jτ de la celda actual, se mueve una celda a la izquierda y cambia del
espacio en blanco a 1 el componente 2jτ de la tupla que allí se encuentra (si en lugar de una
tupla detecta el símbolo # al moverse hacia la izquierda, mueve la cabeza de nuevo hacia la
izquierda; esto ocasionará que M’ abandone sus cálculos, tal como lo haría M).
B3. Utilizando como guía la marca especial # del extremo izquierdo de la cinta, devuelve la
cabeza a la segunda celda de la cinta y pasa al estado compuesto de M’ que refleje la
configuración de M después de ejecutar la transición τ.
Máquinas de Turing multicintas
Como ejemplo, veamos la Fig. 3.15 que presenta la simulación de
una máquina de 3 cintas que mueve la cabeza de su segunda
cinta una celda a la derecha.
Si la ejecución de B1 a B3 conduce a un estado compuesto cuyo
primer componente es el estado de parada de M, entonces se
detienen (o se han detenido) los cálculos que se simulan. Por esto
es que diseñamos M’ de manera tal que también se detenga.
Al construirse de esa manera, M’ únicamente simula las
actividades de M y, por lo tanto, acepta una cadena si, y sólo si,
M la hubiera aceptado.
Por consiguiente, la máquina M’ de cinta única acepta
exactamente el mismo lenguaje que la máquina M de varias
cintas.
Máquinas de Turing multicintas
Teorema 3.1 o
Por cada máquina de Turing de varias cintas M, habrá una máquina de Turing
convencional de una sola cinta M’ tal que L(M) = L(M’).

Entre otras cosas, el Teorema 3.1 refuerza nuestra confianza en la Tesis de Turing. Al ampliar el potencial de los
autómatas finitos con el agregado de memoria para obtener los autómatas de pila, podríamos vernos tentados a
pensar que si ampliamos la memoria a una MT, ésta aumentará su poder reconocedor de lenguajes; pero el
teorema 3.1 nos indica que esto no producirá un aceptador de lenguajes más poderoso.
Podríamos modelar cualquier dispositivo de memoria que se quiera agregar a una MT mediante cintas adicionales,
y –sin embargo- por el teorema 3.1 estos agregados no mejorarán el potencial de reconocimiento de los lenguajes
de la máquina. Por lo tanto, no podemos contradecir la tesis de Turing añadiendo más memorias a una MT.

Otro fenómeno que apoya la Tesis de Turing es que tampoco se obtiene poder de reconocimiento adicional si
añadimos no determinismo a las MT. Para apoyar esta última afirmación, presentaremos el concepto de una
Máquina de Turing no determinista
Máquinas de Turing no deterministas
Máquinas de Turing no deterministas
Una máquina de Turing no determinista es similar a una MT tradicional;
la diferencia radica en que una máquina no determinista no se
encuentra totalmente definida, o -lo que es más importante- puede
que ofrezca más de una transición aplicable a un par estado – símbolo.
Si una MT D llegara al par estado - símbolo actual sin que existiera una
transición aplicable, la máquina abandonaría los cálculos.
Si una MT ND llegara al par estado – símbolo actual donde puede
aplicarse más de una transición, la máquina llevaría a cabo una elección
no determinista y proseguiría con sus cálculos mediante la ejecución de
una de las opciones aplicables.
Resumiendo:
Máquinas de Turing no deterministas
Una máquina de Turing no determinista puede definirse como una séxtupla (S, Σ, Γ, π, ι, h) al igual que
una máquina determinista, excepto que el cuarto componente es un subconjunto de ((S – {h}) x Γ)x(S x
(Γ⋃{L, R})) en vez de una función de (S – {h}) x Γ a S x (Γ⋃{L, R}).
En este contexto, es evidente que las MT ND forman una clase de máquinas que contiene propiamente a
las MT tradicionales (o sea, deterministas) que hemos analizado hasta ahora.
Entonces, decimos que una máquina de Turing no determinista M acepta una cadena w si es posible que
M llegue a su estado de parada después de iniciar sus cálculos con la entrada w. Decimos posible ya que
reconocemos que en el caso de una máquina no determinista, no alcanzar el estado de parada en un
intento particular podría ser el resultado de una “mala decisión” de la máquina, más que de una cadena
de entrada impropia.
Así, definimos como lenguaje L(M) a la colección de todas las cadenas aceptadas por la máquina de Turing
no determinista M. De esta manera, una cadena w está en el L(M) si y sólo si M dispone de opciones que
le permitan alcanzar el estado de parada al recibir la entrada w.
Ya que la MT ND es una generalización de la MT tradicional, tiene que poder aceptar todo lenguaje que
acepte una máquina tradicional. Lo extremadamente interesante es que, -como lo mostrará el teorema
siguiente- las MT ND son incapaces de aceptar más lenguajes que las deterministas (tradicionales).
Por lo tanto, -como sucede con los autómatas finitos- la introducción del no determinismo no aumenta el
poder de reconocimiento de lenguajes de las Máquinas de Turing.
Máquinas de Turing no deterministas
Teorema 3.2
Para cada máquina de Turing no determinista M, existe una máquina de Turing
determinista D tal que L(M) = L(D).
Demostración
Supongamos que M es una máquina de Turing no determinista que acepta el
lenguaje L(M). Entonces, debemos mostrar la existencia de una máquina de
Turing determinista que acepte el mismo lenguaje.
Esto lo logramos de manera indirecta, mostrando que existe una máquina de
Turing determinista de 3 cintas M’ tal que se cumpla que L(M) = L(M’) y que,
-por el teorema 3.1- debe existir una máquina de Turing tradicional
(determinista, de cinta única) que acepte el L(M).
Máquinas de Turing no deterministas
Teorema 3.2
Para cada máquina de Turing no determinista M, existe una máquina de Turing determinista D tal
que L(M) = L(D).
Demostración
Diseñaremos M’ para que pruebe de manera sistemática todas las opciones
posibles para la máquina determinista M, con el objetivo de encontrar una
combinación que lleve a la aceptación de la cadena de entrada. Se emplean las
tres cintas de M’ de la siguiente manera:
1. la primera cinta contendrá la cadena de entrada a evaluar,
2. la segunda cinta se empleará como cinta de trabajo en donde
repetidamente M’ copiará la versión intacta de la cadena de entrada y luego,
-usando esta copia- simulará una secuencia de transiciones de M;
3. la tercera cinta servirá para llevar el control de la secuencia de transiciones
(de M) que se aplica, así como las secuencias que ya se han simulado.
Máquinas de Turing no deterministas
… “El proceso de copiado de la cadena de entrada de la cinta 1 en la cinta 2 implica dos aspectos sutiles, pero importantes: “
El proceso de copiado de la cadena de entrada de la cinta 1 en la cinta 2 implica dos aspectos sutiles, pero importantes:
A. en primer lugar, M’ debe desplazar la cadena una celda hacia la derecha durante el proceso de copiado. Es decir, hay que
colocar el contenido de la celda 1 de la cinta uno en la celda 2 de la cinta dos, el contenido de la celda 2 de la cinta uno en
la celda 3 de la cinta dos, el contenido de la celda 3 de la cinta uno en la celda 4 de la cinta dos, y así sucesivamente.
Esto permite que M’ coloque un símbolo especial en la celda del extremo izquierdo de la cinta dos, lo cual permite que M’
detecte una terminación anormal de M sin provocar el aborto de sus propios cálculos. O sea, si la secuencia de
transiciones que se simula ocasiona que M rebase el extremo izquierdo de la cinta, M’ detectará esta marca especial,
notará que esa secuencia no es productiva y comenzará el proceso de evaluación de otra secuencia.
B. el segundo aspecto importante que está presente en el proceso de copiado de la cadena de entrada, es que M’ debe
colocar una marca especial en el extremo derecho de la cadena de su segunda cinta. Si esta marca especial se detecta al
simular las transiciones de M, se desplazará hacia la derecha. Así, cuando M’ necesita borrar esta cinta antes de comenzar
otra simulación, sólo tiene que borrar hasta esta marca especial.
Finalmente,
Debemos indicar cómo M’ llevará el control de la simulación de secuencias de transiciones de M. La idea es bastante sencilla:
rotulamos cada uno de los arcos del diagrama de transiciones de M con un símbolo único. Si hubiera sólo 5 arcos en el
diagrama, podríamos emplear los dígitos1, 2, 3, 4, y 5. Luego construimos un componente en M’ que genere todas las
cadenas de estos símbolos en forma sistemática utilizando la cinta tres (ver fig. 3.10). Cada una de estas cadenas representa
una secuencia de transiciones y, -al fin de cuentas- estará representada cada una de las transiciones posibles.
Máquinas de Turing no deterministas
… “El proceso de copiado de la cadena de entrada de la cinta 1 en la cinta 2 implica dos aspectos sutiles, pero importantes: “
Al utilizar este generador de secuencias interno, las actividades de M’ se llevan a cabo de la
siguiente manera:
1. copia la cadena de entrada de la cinta uno a la cinta dos en al forma antes descrita.
2. genera la siguiente secuencia de transiciones en la cinta tres.
3. simula esta secuencia con la cinta dos.
4. si esta simulación conduce a un estado de parada de M, se detiene. En caso contrario,
borra la cinta dos y regresa al paso 1.
Resumiendo: como puede apreciarse, no podemos ampliar el potencial de reconocimiento de
lenguajes de las MT ni añadiendo cintas, ni tampoco introduciendo un comportamiento no
determinista, observación que apoya la tesis de Turing.
Esto nos puede llevar a conjeturar que la clase de lenguajes aceptados por las máquinas de
Turing representa el final de nuestra jerarquía de los lenguajes que las máquinas pueden
reconocer y que, -por lo tanto- es de vital importancia para nuestro estudio. Por esto, en las
secciones siguientes nos dedicaremos a aprender más acerca de esta clase de lenguajes.
Ver los Ejercicios…
3.4 Lenguajes aceptados por las
Máquinas de Turing
Teoría de la Computación II. Brookshear Cap. 3
Máquinas de Turing y Lenguajes Estructurados por Frases
Lenguajes aceptados por las máquinas de Turing

Estudiaremos ahora la clase de los lenguajes que aceptan las máquinas


de Turing.
Comparación entre los lenguajes aceptados por
máquinas de Turing y los lenguajes
estructurados por frases
Comparación entre los lenguajes aceptados por las MT y los
Lenguajes Estructurados por Frases
Ya en el Capítulo 1 presentamos las gramáticas estructuradas por frases y analizamos cómo una
gramática de este tipo define un lenguaje que consiste en las cadenas de terminales generados por
la gramática.
Al restringir las formas de las reglas de reescritura disponibles, hemos podido identificar clases de
gramáticas que generan lenguajes regulares e independientes del contexto.
Ahora consideraremos las gramáticas estructuradas por frases que no tienen restricción alguna en
cuanto a sus reglas de reescritura. Esto significa que, tanto el lado izquierdo como el lado derecho
de las reglas de reescritura pueden consistir en cualquier cadena finita de terminales y no
terminales, siempre y cuando exista por lo menos un no terminal en el lado izquierdo.
Los lenguajes generados por estas gramáticas serán los lenguajes estructurados por frases.
Éstos son los lenguajes que pueden definirse gramaticalmente, en el sentido de que sus
estructuras de cadenas se pueden analizar empleando una jerarquía de estructuras de frases.
Dado que las gramáticas regulares y las gramáticas independientes del contexto son casos
especiales de las gramáticas sin restricciones, entonces los lenguajes que las primeras generan
estarán contenidos dentro de la clase de las lenguajes estructurados por frases.
Comparación entre los lenguajes aceptados por las MT y los
Lenguajes Estructurados por Frases
En la Fig. 3.16 tenemos una gramática sin restricciones que genera el lenguaje {xnynzn : n ∈ ℕ}, el cual ya
sabemos que no es independiente del contexto. Es por ello que los lenguajes estructurados por frases
constituyen una clase de lenguajes más extensa que la de los independientes del contexto.
Por esto, en esta sección caracterizaremos a los lenguajes estructurados por frases como aquellos
lenguajes que las máquinas de Turing pueden aceptar. Es decir, los lenguajes estructurados por frases
son precisamente los lenguajes aceptados por las máquinas de Turing.
Demostraremos esto en dos etapas:
1. en el Teorema 3.3 mostraremos que todo lenguaje aceptado por máquinas de Turing es un lenguaje
estructurado por frases, luego
2. en el teorema 3.4 mostraremos que todo lenguaje estructurado por frases es aceptado por la
máquinas de Turing.
Comparación entre los lenguajes aceptados por las MT y los
Lenguajes Estructurados por Frases
Para la demostración del Teorema 3.3 nos basaremos en una gramática que genera el mismo lenguaje
que acepta una MT determinada. La construcción de esta gramática requiere un sistema de notación que
permita representar la configuración total de una máquina de Turing en cualquier etapa de sus cálculos.
Empleando este sistema, el contenido de la cinta de la máquina se representa como una cadena de
símbolos de cinta encerrados entre corchetes. Entonces, primero representamos con el símbolo [ el
extremo izquierdo de la cinta, a continuación la cadena de símbolos que se encuentran en la cinta,
comenzando por la celda del extremo izquierdo e incluyendo por lo menos un espacio en blanco después
del último símbolo distinto de un espacio, y por último cerramos la representación con el símbolo ]. De
esta manera, una cinta que contiene ∆xxyx∆∆∆ … se podría representar como [∆xxyx∆], o quizás como
[∆xxyx∆∆∆∆∆∆], y a una cinta que contiene ∆xx∆yx∆x∆∆∆∆∆ como [∆∆∆xx∆yx∆x∆∆].
Para completar la representación de la configuración de la máquina, insertamos en la representación de
la cinta el estado actual justo a la izquierda del símbolo actual. Así, si p fuera un estado de la máquina,
entonces [∆xpxyxx∆] representaría la configuración en la cual p es el estado actual y la configuración de
la cinta es ∆xxyxx∆∆∆… De forma parecida, [p∆xy∆∆] representaría a la máquina en el estado p con la
configuración ∆xy∆∆…
(Podemos suponer que los símbolos empleados para representar los estados de la máquina son distintos
de los símbolos de cinta de la máquina).
Comparación entre los lenguajes aceptados por las MT y los
Lenguajes Estructurados por Frases
La importancia de esta notación es que nos
ofrece un medio para expresar los cálculos de
una máquina de Turing como secuencia de
cadenas de símbolos, donde cada cadena
representa la configuración de la máquina en
un instante determinado de los cálculos. Así, si
la máquina acepta cadenas deteniéndose con
la cinta configurada como ∆ϒ∆∆∆…, entonces
el proceso de aceptación de la cadena w se
podría resumir como la secuencia de
configuraciones de la máquina que comienza
con [ι∆w∆] y termina con [h∆ϒ ∆], donde ι y h
representan los estados de inicio y parada de
la máquina, respectivamente. La fig. 3.17
muestra una máquina de Turing que acepta el
lenguaje {xnyn: m∈ℕ, n∈ℕ+} y la secuencia de
configuraciones que produce al procesar la
cadena xxy.
Comparación entre los lenguajes aceptados por las MT y los
Lenguajes Estructurados por Frases
Esta secuencia comienza con una configuración que contiene
la cadena de entrada y termina con la configuración [h∆ϒ∆].
Así, al leerla de atrás hacia adelante obtenemos la secuencia
que conduce de la configuración [h∆ϒ∆] a una configuración
que contiene la cadena de entrada; esta secuencia es
bastante similar a una derivación de la cadena. De hecho, si
construyéramos una gramática en la cual toda derivación
tuviera que comenzar con el patrón y cuyas reglas de
reescritura simularon la acción inversa de una transición de
la máquina, entonces estaríamos en camino de construir
una gramática que generara las cadenas aceptadas por la
máquina. Este es el enfoque utilizado para demostrar el
Teorema 3.3.

Teorema 3.3
Todo lenguaje aceptado por máquinas de Turing es un
lenguaje estructurado por frases.
Teorema 3.3 Todo lenguaje aceptado por máquinas de Turing es un lenguaje estructurado por frases.

Demostración
tenemos que demostrar que, para cualquier lenguaje L aceptado por máquinas de Turing, existe una
gramática estructurada por frases que genera L. Para ello seleccionamos una máquina de Turing M
que acepte cadenas sólo deteniéndose con su cinta configurada como ∆ϒ∆∆∆ … y para la cual L(M) = L.
A partir de esta máquina definimos una gramática G de la manera siguiente:
los no terminales de G se definen como S (el símbolo inicial de la gramática), [, ], los símbolos que
representan los estados de M y los símbolos de cinta de M, incluidos ∆ y ϒ.
Los terminales de G son los símbolos del alfabeto de M.
La única regla de reescritura que contiene el símbolo inicial es la regla
S →[h∆ϒ∆]
Esta regla garantiza que cualquier derivación basada en esta gramática comenzará al final de alguna
secuencia de configuraciones de la máquina. También introducimos la regla
∆]→∆∆]
que permite que una derivación amplíe la cadena [h∆ϒ∆] a cualquier longitud que se desee.
Teorema 3.3 Todo lenguaje aceptado por máquinas de Turing es un lenguaje estructurado por frases.

Demostración
A continuación, introducimos reglas de reescritura que simulan transiciones a la inversa. Para cada transición de la forma δ(p, x)
= (q, y) introducimos la regla de reescritura
qy→px
(De esta manera, [∆zqy∆] puede escribirse como [∆zpx∆], lo cual refleja que si la configuración de M fuera [∆zpx∆], la aplicación de
δ(p, x) = (q, y) desplazaría M hacia [∆zqy∆].)
Para cada transición de la forma δ(p, x) = (q, R), introducimos la regla
xq →px
(Por ejemplo, [∆xqyz∆] se podría escribir como [∆pxyz∆].)
Para cada transición de la forma δ(p, x) = (q, L) y cada símbolo de cinta y de M, introducimos la regla
qyx →ypx
(así, [∆qyx∆∆] se podría reescribir como [∆ypx∆∆].)
La lista de reglas de reescritura de G se completa introduciendo tres reglas que permiten que una derivación elimine los no
terminales [, ι, ∆ y ] en ciertas circunstancias. Estas reglas son
[ι∆→λ
∆∆]→∆]
∆]→λ
(Por consiguiente, si una derivación produjera la configuración inicial [ι∆xyx∆∆∆], podría eliminar los no terminales para producir la
cadena xyx.)
Teorema 3.3 Todo lenguaje aceptado por máquinas de Turing es un lenguaje estructurado por frases.

Demostración
Por último, planteamos que L(M) = L(G). Si w fuera una cadena de L(M), existiría
una secuencia de configuraciones de M que comenzaría con [ι∆w∆] y terminaría
con [h∆ϒ∆]. Por lo tanto, podemos producir una derivación de la cadena w de la
forma
S ⇒ [h∆ϒ∆] ⇒ … ⇒ [ι∆w∆] ⇒ w∆] ⇒ w
Comenzamos por aplicar la regla S → [h∆ϒ∆] y luego la regla ∆] → ∆∆]
repetidamente hasta que la cadena [h∆ϒ∆∆∆… ∆] sea tan larga como cualquier
configuración de la secuencia que represente los cálculos de M. Después aplicamos
en orden inverso las reglas de reescritura correspondientes a las transiciones de la
secuencia de configuraciones original. Esto producirá el patrón [ι∆w∆∆… ∆], el cual
podemos reducir a w aplicando las reglas ∆∆]→∆], ∆]→λ , y [ι∆→λ. Como
resultado, w estaría en L(G).
A modo de ejemplo, la Fig. 3.18 presenta la derivación que corresponde a la
secuencia de configuraciones proporcionada en la Fig 3.17.
A la inversa, si tuviéramos una cadena en L(G), su derivación daría origen a una
secuencia de configuraciones que mostrarían a su vez cómo podría aceptar M la
cadena. Así, cualquier cadena de L(G) también se encuentra en L(M).
Fin de la demostración
El siguiente teorema es lo único que nos falta para justificar nuestra afirmación de que los lenguajes estructurados por frases son exactamente los
lenguajes aceptados por las máquinas de Turing.

Teorema 3.4 Todo lenguaje estructurado por frases es un lenguaje aceptado por máquinas de Turing.

Demostración
Comenzaremos por observar que al aplicar la demostración del teorema 3.1 a una máquina
de Turing no determinista de varias cintas se produciría una máquina no determinista de cinta
única que aceptaría el mismo lenguaje que la máquina con varias cintas (es posible que la
transición por simular de un estado compuesto de la forma(p, x1, x2, …, xk) ya no esté
determinada en forma única, pero entonces se conocerán todas las opciones antes de la ejecución
y, por lo tanto, podrán incorporarse al autómata permitiendo el no determinismo).
Así, para cualquier máquina de Turing no determinista M de varias cintas existe una máquina de
Turing M’ de una sola cinta tal que L(M) = L(M’). Tal observación nos permite demostrar este
teorema mostrando que para cada gramática G existe una máquina de Turing no determinista N
de dos cintas tal que L(G) = L(N). A continuación, N se podría simular con una máquina de Turing
no determinista de una única cinta (por la observación anterior), la cual podría ser, -a su vez-
simulada por una máquina de Turing convencional (según el teorema 3.2).
Continúa…
Fin de la demostración
El siguiente teorema es lo único que nos falta para justificar nuestra afirmación de que los lenguajes estructurados por frases son exactamente los
lenguajes aceptados por las máquinas de Turing.

Teorema 3.4 Todo lenguaje estructurado por frases es un lenguaje aceptado por máquinas de Turing.

Demostración
A continuación observamos que una máquina de Turing puede ejecutar cualquier regla de reescritura de la gramática. Es decir, si una
cadena de símbolos v aparece en algún lugar de la cinta de la máquina y la gramática contiene la regla v → w, donde w representa una
cadena (tal vez vacía) de terminales y no terminales, entonces la máquina puede reemplazar la cadena v por la cadena w aplicando
operaciones de escritura y desplazamiento hacia la izquierda y hacia la derecha.
Construimos ahora una máquina no determinista de dos cintas que opera de la siguiente manera:
• utiliza la cinta 1 para almacenar la cadena de entrada por evaluar. Escribe el símbolo inicial de la gramática en la cinta 2.
• Luego aplica repetidamente y de manera no determinista las reglas de reescritura a la cadena de la cinta 2 (decimos “de manera no
determinista” ya que puede existir más de una regla aplicable en un momento dado).
• Si el contenido de la cinta 2 se convierte en una cadena con sólo terminales, compara esta cadena con la cadena de entrada que está
almacenada en la cinta 1.
• Si ambas cadenas son idénticas, entonces la máquina se detiene; caso contrario, mueve una de las cabezas hacia la izquierda hasta que
ocurra una terminación anormal. (busca detenerse o abortar)
En resumen, este proceso únicamente emplea la cinta 2 para calcular una derivación con base en las reglas de la gramática. Si la cadena de
entrada se puede derivar de la gramática, entonces es posible que esta cadena sea la producida en la cinta 2.
En este caso, la máquina aceptará la entrada, deteniéndose. Sin embargo, si la entrada no puede derivarse de la gramática, la cadena
producida en la cinta 2 nunca podrá ser igual a la de entrada, y sería imposible que la máquina aceptara esa cadena.
Por consiguiente, el lenguaje aceptado por la máquina es el lenguaje generado por la gramática.
Resumen de los lenguajes y las máquinas estudiadas hasta
ahora en la jerarquía siguiente:

lenguajes estructurados por frases


(aceptados por las máquinas de Turing)

lenguajes independientes del contexto


(aceptados por autómatas de pila)

lenguajes regulares
(aceptados por autómatas finitos)
Alcance de los Lenguajes Estructurados
por Frases

Teoría de la Computación II. Brookshear Cap. 3


Máquinas de Turing y Lenguajes Estructurados por Frases
Alcance de los Lenguajes Estructurados por Frases

Como pudimos comprobar hay una equivalencia entre los lenguajes


estructurados por frases y los lenguajes aceptados por las Máquinas de
Turing. Esto significa que las Máquinas de Turing pueden servirnos para
estudiar el alcance de los Lenguajes Estructurados por Frases, lo cual es
la esencia del Teorema siguiente:

Teorema 3.5:
Para cada alfabeto Σ existe al menos un lenguaje sobre Σ que no es un
Lenguaje Estructurado por Frases.
Alcance de los Lenguajes Estructurados por Frases
Teorema 3.5:
Para cada alfabeto Σ existe al menos un lenguaje sobre Σ que no es un Lenguaje Estructurado por Frases

Demostración:
Sea L un Lenguaje Estructurado por Frases del alfabeto Σ. Entonces, por el Teorema 3.4, existe una
máquina de Turing M tal que L(M)= L.
Comencemos señalando que existe una máquina M cuyos símbolos de cinta se eligen del conjunto Σ⋃{∆}.
Si M es la máquina de Turing tal que L(M) = L y los símbolos de cinta incluyen más de Σ⋃{∆}, podemos
contruir otra máquina de Turing M’ con símbolos de cinta de Σ⋃{∆}, de modo que L(M’)=L(M)=L.
De hecho, sea x cualquier símbolo (distinto de ∆) de Σ. Entonces ponemos en una lista los símbolos
distintos de ∆ de M y representamos cada entrada de la lista con una cadena de x de longitud igual a la
posición del símbolo en esta lista (el primer símbolo se representa con x, el segundo con xx, etc.). Así,
cada uno de los símbolos de la cinta de M que no sea un ∆, -y por consiguiente también cada símbolo del
alfabeto de M’- se representa con una cadena de x única. De esta manera, siempre es posible representar
el contenido de la cinta de M por medio de cortas cadenas de x separadas por ∆ (un ∆ de la cinta de M se
codificaría como dos espacios consecutivos, es decir una cadena de x vacía).
Alcance de los Lenguajes Estructurados por Frases
Teorema 3.5:
Para cada alfabeto Σ existe al menos un lenguaje sobre Σ que no es un Lenguaje Estructurado por Frases

Demostración (finaliza):
Ahora, construimos M’ para que traduzca su entrada a esta forma codificada, simule las acciones de M y se
detenga únicamente si M se detiene. Así, M’ aceptará exactamente las mismas cadenas que acepta M, sin
emplear más que los símbolos de cinta Σ⋃{∆}.
Concluimos que, dado un lenguaje estructurado por frases de un alfabeto Σ, existe una máquina de Turing
con símbolos de cinta Σ⋃{∆} tal que L(M) = L.
Lo que nos resta de la demostración es, -en esencia- lo mismo que la demostración del teorema 1.1.
Podemos generar de manera sistemática una lista de todas las máquinas de Turing con símbolos de cinta
Σ⋃{∆}, generando primero aquellas máquinas con sólo dos estados (recordemos que cualquier MT tiene al
menos dos estados: ι y h), seguida por las MT que tienen 3 estados, etc. Por lo tanto, existe una cantidad
contable de tales máquinas de Turing. Por otra parte, existe una cantidad infinita de cadenas en Σ* y,
-debido a ello- es incontable la cantidad de lenguajes que se pueden formar a partir de Σ.
Por consiguiente, existen más lenguajes basados en Σ que máquinas de Turing con símbolos de cinta en
Σ⋃{∆}. Asimismo, deben existir lenguajes basados en Σ que no son lenguajes estructurados por frases.
Alcance de los Lenguajes Estructurados por Frases
Teorema 3.3
Todo lenguaje aceptado por máquinas de Turing es un Lenguaje Estructurado por Frases.

Teorema 3.4:
Todo Lenguaje Estructurado por Frases es un lenguaje aceptado por máquinas de Turing.

Teorema 3.5:
Para cada alfabeto Σ existe al menos un lenguaje sobre Σ que no es un Lenguaje Estructurado por Frases

Aquí es donde comienza a complicarse la cosa. Los teoremas 3.3, 3.4 y 3.5 nos dicen que existen lenguajes que no tienen bases gramaticales y
además que las MT sólo pueden reconocer aquellos lenguajes que sí tienen bases gramaticales. Si aceptamos la Tesis de Turing de que las MT
engloban la esencia de cualquier proceso computacional, debemos concluir que ningún proceso algorítmico puede reconocer los lenguajes que
no tienen bases gramaticales.
Esta conclusión no sólo indica que existen lenguajes que no podemos analizar sintácticamente con una computadora, sino que además tiene
ramificaciones relacionadas con las búsqueda de sistemas que comprendan los lenguajes naturales, un área de gran actividad en las
investigaciones recientes.
De hecho, nos indica que en el desarrollo de un sistema de procesamiento de lenguajes naturales existe el requisito de que el lenguaje que se
procesa tenga una estructura gramatical bien definida; si el lenguaje natural no cuenta con esta estructura, no seremos capaces de procesarlo
algorítmicamente.
Este requisito tiene además un estrecho vínculo con el tema de la inteligencia natural comparada con la inteligencia artificial. Si, -como muchos
creen- la mente humana opera ejecutando algoritmos, entonces la tesis de Turing indica que existen lenguajes cuya sintaxis no puede analizar
la mente humana.
Por otra parte, si la inteligencia natural se basa en un nivel más poderoso que la ejecución de algoritmos, entonces la tesis de Turing sugiere
que el desarrollo de máquinas verdaderamente inteligentes seguirá siendo por siempre sólo un sueño.
Alcance de los Lenguajes Estructurados por Frases
Teorema 3.3
Todo lenguaje aceptado por máquinas de Turing es un Lenguaje Estructurado por Frases.

Teorema 3.4:
Todo Lenguaje Estructurado por Frases es un lenguaje aceptado por máquinas de Turing.

Teorema 3.5:
Para cada alfabeto Σ existe al menos un lenguaje sobre Σ que no es un Lenguaje Estructurado por Frases

Tesis de Turing:
El poder computacional de una máquina de Turing es tan grande como el de cualquier sistema computacional posible.

Por lo que hemos visto hasta aquí la teoría presentada tiene consecuencias significativas. El único punto
débil en esta cadena es la tesis de Turing, esta conjetura de que el concepto de computación con una
máquina de Turing es tan poderoso –aunque quizás no tan conveniente- como cualquier otro modelo
computacional. En la actualidad, la gran mayoría de los científicos de la computación acepta la Tesis de
Turing, y esta aceptación proviene del hecho de que la Tesis es congruente con otros resultados y
conjeturas que han surgido al estudiar la computación desde otras perspectivas, cosa que haremos más
adelante.
3,5 Más allá de los Lenguajes
Estructurados por Frases

Teoría de la Computación II. Brookshear Cap. 3


Máquinas de Turing y Lenguajes Estructurados por Frases
Introducción

Anteriormente se ha demostrado la existencia de lenguajes que no


están estructurados por frases o, –lo que es lo mismo- no son
aceptados por máquinas de Turing, pero no hemos identificado
explícitamente a uno de estos lenguajes, aún.
En esta sección presentaremos:
1. los lenguajes no aceptados por las Máquinas de Turing,
2. las Máquinas de Turing Universales y
3. la distinción entre lenguajes aceptables y decidibles
Sistema de codificación de Máquinas de Turing

Para poder identificar a los lenguajes no aceptados por las máquinas de


Turing (es decir aquellos no estructurados por frases) necesitaremos
de un sistema de codificación con el cual podamos representar a las
máquinas de Turing con alfabeto Σ y símbolos de cinta Σ⋃{∆} como
cadenas que contienen únicamente ceros y unos.
Por lo tanto, desarrollaremos este sistema de codificación antes de
continuar con los objetivos propuestos.
Sistema de codificación de Máquinas de Turing
Dada una máquina de Turing M por representar, nuestro sistema de codificación necesita que dispongamos
los estados de M en una lista cuyo primer elemento corresponda al estado inicial y el segundo al estado de
detención o parada.
Basados en el orden de esta lista podremos hablar del primer estado de M, del segundo estado de M y, en
general, del estado j de M.
El estado j de M se representará con una cadena de ceros de longitud j. Por lo tanto el estado inicial estará
representado por 0, el estado de parada por 00 y el siguiente estado, -en caso de existir- por 000.
A continuación representaremos los símbolos L y R y los símbolos de Σ(esto es, los símbolos de cinta de M
distintos del espacio en blanco) como cadenas de ceros. Esto lo lograremos acomodando en una lista los
símbolos de Σ y representando L con 0, R con 00, el primer símbolo de la lista con 000, el segundo con 0000
y, -en general- el símbolo j con una cantidad de ceros de longitud j+2.
Establezcamos ahora que el símbolo correspondiente al espacio en blanco se representará con la cadena
vacía, obtenemos un sistema con el que podemos representar:
1. los símbolos L y R,
2. los estados de M y
3. los símbolos de cinta de M
mediante cadenas de ceros.
Sistema de codificación de Máquinas de Turing
Este sistema nos permitirá representar cualquier transición de M como cadenas de ceros y
unos.
Se puede identificar cualquier transición de la forma δ(p, x) = (q, y) con una cuádrupla (p, x, q,
y) en donde p es el estado actual, x el símbolo actual, q el nuevo estado e y corresponde, bien
a un símbolo de la cinta en caso de que haya escritura, o bien a L o R en caso de movimiento
del cabezal.
Por lo tanto, es posible representar todas la transición como 4 cadenas de ceros separados
por unos. Por ejemplo, la cadena 01000100100 representaría la transición δ(ι, x) = (h, R)
donde x es el símbolo leído representado por 000 y h es el estado de parada de la máquina.
Como el espacio en blanco se representa con la ausencia de ceros, la cadena 011001
representa la transición δ(ι, ∆) = (h, ∆) donde h es nuevamente el estado de parada de la
máquina.
Observemos que una lista de todas las transiciones disponibles para una MT con símbolos
de cinta Σ⋃{∆} constituye una descripción completa de la máquina y, -por lo tanto- cualquier
máquina de este tipo se puede representar como una lista de transiciones codificada.
Sistema de codificación de Máquinas de Turing
Observemos que una lista de todas las transiciones disponibles para una MT con símbolos de cinta Σ⋃{∆} constituye una descripción
completa de la máquina y, -por lo tanto- cualquier máquina de este tipo se puede representar como una lista de transiciones codificada.
Adoptamos la regla convencional de añadir un 1 al inicio y al final de la lista, y un solo 1 para separar las transiciones de la lista. Por lo tanto, la
cadena 10110010001010001001001 (esto es: un 1 introductorio seguido por el código de transición 011001000, un 1 separador, el código
01000100100 y un 1 final) representa la máquina con dos transiciones δ(ι, x) = (h, x) y δ(ι, x) = (h, R) que representamos en la fig. 3.20.

Cuando estamos representando de esta manera a cualquier MT, establecemos que


las transiciones que se incluirán en la lista tienen el siguiente orden:
· primero las transiciones que surgen del estado 0 inicial,
· luego las que se originan en el estado 000,
· luego las que se originan en el estado 0000,
· etc. hasta lograr incluir a todos los estados desde los cuales pueden originarse
transiciones.
Las transiciones correspondientes a un estado se acomodan de acuerdo al símbolo
que se requiere en la celda actual de la cinta comenzando por:
1. la transición que tiene un espacio en blanco como símbolo actual,
2. luego la transición cuyo símbolo actual es 000, y
3. así sucesivamente.
Esta uniformidad hace más fácil de evaluar una cadena de ceros y unos para ver si
realmente es una representación válida de alguna MT.
Recordemos que las MT son deterministas por definición.
Un lenguaje no estructurado por
frases
3.5 Más allá de los Lenguajes Estructurados por Frases
Brookshear
Un lenguaje no estructurado por frases
Cuando utilizamos la forma de codificación recién vista, encontramos que cada MT con alfabeto Σ y símbolos de
cinta Σ⋃{∆} se puede representar como una cadena de ceros y unos, la cual puede interpretarse como un número
binario no negativo. Aún más, si contáramos en binario llegaríamos en algún momento al patrón que representa
una MT específica con símbolos de cinta Σ⋃{∆}. Lógicamente, no todas las representaciones binarias realizadas con
binarios enteros no negativos corresponderán a máquinas válidas.
Establezcamos que cada uno de estos enteros se asociará con la sencilla MT mostrada en la Fig. 3.21. Así, tenemos
una función de ℕ sobre las MT con alfabeto Σ y símbolos de cinta Σ⋃{∆}. Ahora empleamos la notación Mi para
representar la máquina que esta función relaciona con el entero i.
Basados en esta función, podemos construir otra función, pero esta vez de Σ* sobre la colección de MT con
alfabeto Σ y símbolos de cinta Σ⋃{∆}. Nos bastará con asociar una cadena w de Σ* con la máquina M|w|, donde |w|
representa la longitud de w. con el fin de hacer más sencilla la notación, utilizaremos Mw para representar la
máquina asociada a w por medio de esta función.
Observemos que los símbolos de w también se encuentran en el alfabeto de Mw, por lo que tiene sentido aplicar
Mw a la cadena de entrada w. Definimos que el lenguaje L0 es el subconjunto {w: Mw no acepta w} de Σ*; una
cadena w de Σ* se halla en L0 si, y sólo si, ésta no es aceptada por su máquina Mw correspondiente.
Un lenguaje no estructurado por frases
Ahora nuestra tarea será mostrar que L0 no es aceptado por máquinas de Turing. Para
hacer esto, mostraremos que se llega a una contradicción si se supone lo contrario. Si L0
fuera aceptado por alguna máquina de Turing, utilizando un argumento similar al de la
demostración del teorema 3.5, podemos suponer que el alfabeto de la máquina es Σ y
su conjunto de símbolos de cinta es Σ⋃{∆}. Asimismo, L0 debe ser aceptado por Mw0
para alguna cadena w0 en Σ* (toda máquina de Turing con alfabeto Σ y símbolos de cinta
Σ⋃{∆} es Mw para una w de Σ* ). Por lo tanto, L0 = L(Mw0).
Ahora nos preguntamos si la cadena w0 existe o no en L(Mw0) [tiene que estar o no
estar], pero –como veremos en un momento- ambas opciones nos llevan a
contradicciones.
Con base en la definición de L0, sabemos que w0 ∈ L(Mw0) implica que w0 ∉ L0, y que w0 ∉
L(Mw0) implica que w0 ∈ L0. Sin embargo, como L0 = L(Mw0), ambos enunciados son
contradictorios. En vista de esta paradoja, debemos concluir que nuestra conjetura con
respecto a la aceptación de L0 es falsa; en otras palabras, el lenguaje L0 no es aceptado
por su propia máquina de Turing.
Máquinas de Turing Universales
3.5 Más allá de los Lenguajes Estructurados por Frases
Brookshear
Máquinas de Turing Universales
Nuestro siguiente objetivo es mostrar que el complemento de L0, el conjunto {w | Mw
acepta a w}, es aceptado por máquinas de Turing. Esto demostrará que la capacidad de
una máquina de Turing para aceptare un lenguaje no es simétrica con la capacidad para
rechazar el complemento del lenguaje. En otras palabras, existen casos donde se puede
construir una máquina de Turing que identifique las cadenas de un lenguaje, pero no se
puede construir una máquina de Turing que identifique las cadenas que NO ESTÁN en el
lenguaje.
Sin embargo, para poder mostrar que el complemento de L0 es aceptado por máquinas
de Turing, será necesario presentar el concepto de Máquina de Turing Universal. Ésta,
no es más que una máquina de Turing programable que, -dependiendo de su programa-
puede simular cualquier otra máquina de Turing.
De esta manera, las Máquinas de Turing Universales son los antepasados abstractos de
las modernas computadoras programables que leen y ejecutan los programas
almacenados en sus memorias. Más aún, las Máquinas de Turing Universales están
diseñadas para ejecutar programas que se almacenan en sus cintas.
Máquinas de Turing Universales
Un programa para una MTU no es más que una versión
codificada de una MT que lleva a cabo la tarea que se quiere
que ejecute la MTU. Supongamos que queremos programar
una MTU para que desempeñe una cierta actividad
específica. Primero diseñaríamos una MT tradicional que
realizara la tarea; luego codificaríamos esta máquina como
una cadena de ceros y unos, como ya lo hicimos antes. La
cadena de código sería el programa de la MTU.
El siguiente paso sería codificar los datos que se usarían como
entrada para los cálculos deseados. Para esto recordamos
que a cada símbolo de la cinta que sea distinto del espacio en
blanco se le asigna un código de 3 o más ceros. Por
consiguiente, cualquier cadena de estos símbolos se puede
representar con la secuencia de códigos adecuada.
En esta secuencia separamos con un 1 los códigos adyacentes
y encerramos entre corchetes toda la secuencia, con un 1 en
cada extremo, como vemos en la Fig. 3.22.
Notemos que la cadena vacía estaría representada por 11, es
decir una secuencia vacía de códigos.
Máquinas de Turing Universales
Después de codificar la máquina que se simulará
y la cadena que servirá como entrada, colocamos
estos códigos en la cinta de entrada de la MTU,
como se describe a continuación.
La celda del extremo izquierdo permanece en
blanco, luego se encuentra la versión codificada
de la máquina que se simulará, seguida por la
cadena de entrada codificada (la MTU puede
detectar la separación entre la codificación de la
máquina y los datos, ya que el código de la
máquina termina con un 1 y el código de los
cados comienza con un 1. Para ser más precisos,
toda transición codificada debe comenzar con el
código de un estado, lo que requiere, por lo
menos, un 0. Así, es posible detectar el fin de la
lista de transiciones con la presencia de un
código de estado incorrecto. Veamos la Fig. 3.23)
Máquinas de Turing Universales
Una vez que esta información se ha colocado en la cinta de la MTU, ubicamos
el cabezal en el extremo izquierdo de la cinta y ponemos en marcha la máquina
a partir de su estado inicial. Partiendo de esta configuración, la MTU extrae y
simula las transiciones que encuentra en la primera posición de la cinta
conforme manipula la cadena existente en la segunda porción de la cinta.
Podríamos visualizar esta MTU como una MT de 3 cintas: la primera almacena
el programa de entrada y los datos, así como para sostener cualquier salida; la
segunda cinta sirve como área de trabajo en la que se manipulan los datos
intermedios; y la tercera cinta se usa para contener una representación del
estado actual de la máquina simulada.

1: programa de la MT codificada + datos a procesar

MTU 2: área de trabajo con datos intermedios

3: representación del estado actual de la MT simulada

También podría gustarte