Las maquinas de Turing son máquinas abstractas propuestas por Alan Turing en “Proceedings of the London Mathematical Society” en 1936.
Se modela una computadora como una máquina que analiza una cinta lineal de papel separada en cuadrados con símbolos y realiza tres tipos de operaciones:
- Reemplazar el símbolo del cuadrado actual por otro.
- Mover la cabecera de la cinta un cuadrado a la izquierda, a la derecha, o quedarse quieto.
- Pasar del estado actual a otro.
La cinta sirve como entrada y se la supone finita.
Formalmente, una máquina de Turing es una 5-tupla donde:
- es un conjunto finito de estados, que no incluye ni ni (estados de detención).
- es un conjunto finito del alfabeto de entrada, .
- es el conjunto finito del alfabeto de cinta, se supone que no contiene (espacio en blanco).
- es el estado inicial, .
- es una función parcial .
Sea el movimiento con . Se interpreta que la MT pasa de a , sustituye por en el cuadrado, y según va uno a la derecha, a la izquierda, o se queda quieto. Si es o , entonces se detiene. no está definida para ningún par o . también puede fracasar si intenta mover la cabeza de la cinta más allá del extremo izquierdo.
Una configuración es un par con . Sea la cabeza que está en el primer símbolo de la cadena . Sea lo mismo que , implicando que los cuadrados a la derecha de están en blanco.
Sea la secuencia de movimientos que puede incluir cero o más movimientos. Sea la configuración y tal que se escribe el siguiente movimiento:
Y una configuración inicial es correspondiente a la entrada . es aceptada por con . El lenguaje aceptado por es el conjunto de cadenas de entrada que acepta.
Al procesar una entrada , puede:
- Aceptarla al entrar en .
- Rechazarla al entrar en .
- O entrar en un bucle infinito. El observador no se entera si aceptó o no, por lo que sigue en movimiento perpetuo.
Los diagramas de transición de una MT son más complejos, pero útiles en ciertos casos. El movimiento se representa como .
Ejemplo: la siguiente MT acepta el lenguaje , es decir todo string que se divida en dos veces un mismo substring.

Conceptualmente el diagrama de esta MT separa el procesamiento en dos partes:
- Validar la longitud par y posibilitar correlaciones: encontrar el centro de la cadena de entrada, y facilitar que la MT distinga los símbolos de la primera y segunda mitades. Para esto se trabaja simultáneamente hacia el centro desde ambos extremos, cambiando los símbolos a su versión en mayúsculas. Una vez que se llega al centro, se revierte la primera mitad a sus símbolos originales.
- Validar correlaciones una a una: se comienza de nuevo al principio y se compara cada símbolo en minúsculas de la primera mitad contra su contraparte mayúscula de la segunda mitad. Se registra el avance al cambiar los símbolos en minúsculas a mayúsculas y borrar el mayúscula correspondiente.
Esta MT acepta el string abab de la siguiente manera: .