Máquina de Turing
Máquina de Turing
Máquina de Turing
Equipo 3:
Alumno Control
José Ignacio Diaz Rodriguez 20320996
Brandon Isrrael Oyorsabal Rabiela 20321153
Juan Carlos Suastegui Gomez 20321233
Fernando Isrrael Torres Carmona 20321239
Hora: 01:00-02:00pm.
ejemplo de cómo se puede crear una máquina de Turing de manera modular en C#: ............... 13
Lenguajes regulares....................................................................................................................... 16
Conclusiones ..................................................................................................................................... 24
Bibliografía ........................................................................................................................................ 25
3
Introducción
máquina de Turing
Alan Turing fue un polifacético hombre de ciencias nacido en Londres en 1912. Fue
informática moderna.
algorítmica.
(con 26 posicione s cada uno en base a las 26 letras del alfabeto) que iban girando a medida
que se introducía el mensaje de entrada. Estos giros hacían que a cada letra de entrada
del mensaje original le correspondiera una letra de salida de manera que, al ir rotando a
cada pulsación, la misma letra de entrada no tenía siempre la misma letra de salida. Es
los primeros computadores electrónicos programables digitales, así como otra de las
4
inteligencia artificial, principalmente por la concepción del test de Turing en 1950, según el
cual puede juzgarse la inteligencia de una máquina si sus respuestas en la prueba son
investigación Turing reconoció ser homosexual, lo cual era delito en esa época en Reino
algoritmo.
automática sobre una entrada llamada cinta, generando una salida en esta misma. Este
modelo está conformado por un alfabeto de entrada y uno de salida, un símbolo especial
y una cadena de caracteres (la cinta, la cual es finita por la izquierda) pertenecientes al
alfabeto de entrada. Luego va leyendo una celda de la cinta, borrando el símbolo, escribir
la derecha (solo una celda a la vez), repitiendo esto según se indique en la función de
la salida.
Una máquina de Turing con una sola cinta puede ser definida como una 7-tupla ;
M = (𝑄, Σ, Γ, 𝑠, 𝑏, 𝐹, 𝛿) donde:
de máquina o, de entrada.
𝑠 ∈𝑄 es el estado inicial.
𝛿 ∶ 𝑄 𝑥 Γ ⟶ P(𝑄 𝑥 Γ 𝑥 {𝐿, 𝑅} )
Su potencia es, por tanto, superior a otros tipos de autómatas, como el autómata
finito, o el autómata con pila, o igual a otros modelos con la misma potencia computacional.
Esta Máquina de Turing está definido sobre el alfabeto Σ={a,b,c}, posee el conjunto
de estados
7
denominado Blanco.
interior.
*Una transición desde un estado a otro, se representa mediante una arista dirigida
que une a estos vértices, y esta rotulada por símbolo que lee el cabezal/símbolo que
*El estado inicial se caracteriza por tener una arista que llega a él, proveniente de
*El o los estados finales se representan mediante vértices que están encerrados a
casillas. Sobre esta cinta hay un dispositivo capaz de desplazarse a lo largo de ella a razón
de una casilla cada vez. Este dispositivo cuenta con un cabezal capaz de leer un símbolo
8
escrito en la cinta, o de borrar el existente e imprimir uno nuevo en su lugar. Por último,
Los símbolos que definen el estado del dispositivo no tienen por qué coincidir con
los símbolos que se pueden leer o escribir en la cinta. En los programas presentados en el
artículo, los posibles símbolos a leer o escribir en la cinta son el 0 y el 1, y los posibles
representación del estado, usando para ello los números del 0 al 99, para permitir un mayor
Lo que hace es leer el símbolo que hay en la casilla que tiene debajo. Después toma el
símbolo del estado en que se encuentra. Con estos dos datos accede a una tabla, en la
cual lee el símbolo que debe escribir en la cinta, el nuevo estado al que debe pasar y si
primer blanco detrás de dicho símbolo blanco. Es decir, situada sobre el 1 situado en el
El conjunto de estados es {s1, s2, s3, s4, s5} y el estado inicial es s1.
9
Vemos que esta máquina no hace gran cosa. Sin embargo, una máquina de Turing
puede hacer cosas útiles, tales como suma r dos números, multiplicarlos, copiarlos, etc.
Disponiendo de una máquina con el suficiente número de estados, podríamos hacer con
Las máquinas de Turing plantean una deducción bastante curiosa: dado que en
ellas se puede realizar cualquier trabajo computable, es posible programarlas para que
puede ser codificada en cualquier ordenador, por pequeño que sea, sería posible (si
máquina de Turing que simule un superordenador. Esto significa que todos los
ordenadores pueden realizar exactamente el mismo tipo de tareas, y que los cálculos que
pueda realizar el más grande los puede llevar a cabo también el más pequeño. La única
de transiciones.
Son aquellos en los que cada uno de los bloques de construcción se representa
como un nodo, con flechas entre dichos nodos para indicar las transiciones entre bloques.
cinta y, que cuando una termine su ejecución, el otro empiece. El contenido de la cinta
cuando comienza la ejecución de la segunda máquina de Turing, está formado por todo lo
una máquina de Turing. Es evidente que, salvando los problemas de memoria, los
Nota: Observe que la anterior afirmación no menciona para nada la posible dificultad
de escribir el programa o del tiempo que pueda emplear en realizar el cálculo (cualquier
cálculo que pueda hacer un ordenador puede teóricamente efectuarse con papel y lápiz).
Una máquina de Turing es un autómata que se mueve sobre una secuencia lineal
(generalmente un carácter) y realiza ciertas acciones en base a una tabla que tiene en
cuenta su "estado" actual (interno) y el último dato leído. Entre las acciones está la
13
Definir una clase Tape (cinta) que represente la cinta de la máquina de Turing. Esta clase
puede contener un arreglo de símbolos y un puntero que indica la posición actual en la cinta.
Además, debe proporcionar métodos para mover el puntero a la izquierda o a la derecha, leer el
class Tape
{
private char[] symbols;
private int position;
{
symbols = input.ToCharArray();
position = 0;
}
la máquina de Turing. Esta clase puede contener el estado actual, el símbolo actual, el
class Transition
{
public string CurrentState { get; set; }
public char CurrentSymbol { get; set; }
public string NextState { get; set; }
public char NextSymbol { get; set; }
public int MoveDirection { get; set; } // -1 para mover a la
izquierda, 1 para mover a la derecha
}
15
completa. Esta clase puede contener una lista de transiciones, un diccionario de estados
class TuringMachine
{
private List<Transition> transitions;
private HashSet<string> finalStates;
while (!finalStates.Contains(currentState))
{
char currentSymbol = tape.ReadSymbol();
if (transition == null)
{
Console.WriteLine("No se encontró una transición válida
para el estado y símbolo actual.");
return;
}
tape.WriteSymbol(transition.NextSymbol);
if (transition.MoveDirection == -1)
tape.MoveLeft();
else if (transition.MoveDirection == 1)
tape.MoveRight();
currentState = transition.NextState;
16
Las máquinas de Turing, así como los AF y los AP se utilizan para aceptar cadenas
un mecanismo de control, una cinta de entrada que se divide en celdas, y una cabeza de
lectura/escritura que lee un solo símbolo de la cinta por vez. La cinta tiene una celda de
inicio de más a la izquierda, pero es infinita a derecha. Cada celda de la cinta puede
más a la izquierda (n ≥ 0) contienen una cadena ω, siendo |ω|=n. ω está definida sobre un
fundamental con el autómata de pila y el autómata finito, es que se puede leer un símbolo
aceptar los lenguajes recursivos enumerables o estructurados por frases que incluyen todo
Lenguajes regulares
Una máquina de Turing puede aceptar lenguajes regulares, que son aquellos que
pueden ser descritos por una expresión regular. Estos lenguajes incluyen patrones simples
ser reconocido y aceptado por una máquina de Turing determinista (MTD) o una máquina
Una MTD es una máquina de Turing que opera de manera determinista, lo que
significa que, para cada estado y símbolo de entrada, existe exactamente una transición
definida. Una MTND, por otro lado, puede tener múltiples transiciones posibles para un
cadenas de entrada. Un lenguaje regular puede ser descrito por una expresión regular, que
mover la cabeza de acuerdo con el símbolo leído. En el caso de los lenguajes regulares,
Las máquinas de Turing también pueden aceptar lenguajes libres de contexto, que
son más poderosos que los lenguajes regulares. Estos lenguajes incluyen estructuras más
los lenguajes libres de contexto son un tipo de lenguaje formal que se puede
describir mediante una gramática libre de contexto. Estos lenguajes son más expresivos y
definen cómo se pueden construir las cadenas dentro del lenguaje. Cada regla de
secuencia de símbolos que pueden ser terminales (símbolos que forman parte del lenguaje)
o no terminales (símbolos que pueden ser reemplazados por una secuencia de símbolos).
independiente del contexto en el que aparecen los símbolos. Esto significa que la elección
en el cual la estructura de los programas está definida por una gramática libre de contexto.
extendidas.
contexto. Estos lenguajes son aún más poderosos y pueden representar estructuras y
Los lenguajes sensibles al contexto son un tipo de lenguaje formal que se encuentra
en un nivel de complejidad mayor que los lenguajes libres de contexto. Estos lenguajes son
tipo 1, que son más generales que las gramáticas libres de contexto.
19
de modificar el contexto o contexto de las cadenas a medida que se aplican. Esto significa
que las reglas de producción pueden tomar en cuenta información adicional, más allá de la
Las gramáticas sensibles al contexto tienen una forma generalizada para sus reglas
αAβ→αγβ
Donde:
terminales.
A es un símbolo no terminal.
cuenta el contexto o contexto de los símbolos involucrados. Esto significa que el lado
Python, en el cual la sintaxis y la estructura del código están definidas por una gramática
sensible al contexto.
20
Estos lenguajes son los más generales y pueden representar cualquier lenguaje decidible, es decir,
aquellos lenguajes para los que existe un algoritmo que puede determinar si una cadena pertenece
al lenguaje o no.
recursivamente enumerables.
reconocido por una máquina de Turing en su modo de "enumeración" o "generación". Esto significa
que una máquina de Turing puede producir todas las cadenas que pertenecen al lenguaje, pero no
que, al ejecutarse, eventualmente enumerará todas las cadenas que pertenecen a L. Si una cadena
o reconocerla.
recursivos, donde una máquina de Turing puede determinar en tiempo finito si una cadena
pertenece o no al lenguaje.
21
una máquina de Turing universal. Este lenguaje contiene todas las descripciones de máquinas de
Turing y sus respectivas entradas para las cuales la máquina de Turing universal aceptará.
muestra una representación formal comúnmente utilizada para describir una MT:
Donde:
Σ es el alfabeto de entrada.
entrada).
δ es la función de transición.
q0 es el estado inicial.
δ: Q × Γ → Q × Γ × {L, R}
transición se define de manera similar, pero permite múltiples transiciones para un estado
construir una MT para verificar si una cadena pertenece a un lenguaje regular específico.
entrada está compuesta solo por símbolos '0' y '1' y tiene una longitud par. En otras
palabras, queremos reconocer el lenguaje regular L = {'0', '1’} * con una longitud par.
23
Estados:
Alfabeto:
Transiciones:
δ(q0, '0') = (q1, '0', R): Si la máquina de Turing lee '0' en el estado q0, transita al
δ(q0, '1') = (q1, '1', R): Si la máquina de Turing lee '1' en el estado q0, transita al
δ(q0, blanco) = (qr, blanco, S): Si la máquina de Turing lee el símbolo blanco
(movimiento estacionario).
δ(q1, '0') = (q0, '0', R): Si la máquina de Turing lee '0' en el estado q1, transita al
δ(q1, '1') = (q0, '1', R): Si la máquina de Turing lee '1' en el estado q1, transita al
δ(q1, blanco) = (qr, blanco, S): Si la máquina de Turing lee el símbolo blanco en el
Con esta descripción, hemos construido una MT que reconoce si una cadena de entrada
está compuesta solo por símbolos '0' y '1' y tiene una longitud par.
Conclusiones
alfabetos, función de transición) y su representación mediante una tupla. Esta notación proporciona
en la práctica de la informática.
de los algoritmos y para demostrar resultados teóricos sobre qué problemas son computables y
cuáles no.
25
servido como base teórica para el diseño y evaluación de lenguajes de programación, así como para
captura la noción intuitiva de un algoritmo efectivo, lo que ha permitido establecer límites teóricos
encargan de traducir programas escritos en lenguajes de alto nivel a instrucciones ejecutables por
automatizado.
Bibliografía
(Lenguaje AWL). ed. Barcelona: Cano Pina, 2012. 102 p. Disponible en:
2023
https://elibro.net/es/lc/itacapulco/titulos/12249
Constable, L., Meloni, B., Vázquez, J., Giró, J. (2015). Lenguajes formales y teoría