Máquinas que comen máquinas





To iterate is human, to recurse divine.— L. Peter Deutsch



Ivan Meza

Máquinas de Turing

Es una tupla $(Q,\Sigma,\Gamma,q_0,B,A,\delta)$

  • $Q$ conjunto finito de estados
  • $\Sigma$ alfabeto de cadenas reconocidas
  • $\Gamma $ alfabeto de cinta, $\Sigma \subset \Gamma$
  • $q_0$ estado inicial
  • $B$ Símbolo de espacio en blanco $B \in \Gamma$ pero $B \not\in \Sigma$
  • $A$ estados finales
  • $\delta$ función de transición $Q \times \Gamma \rightarrow Q\times\Gamma\times\{der,izq\}$

Jerarquía de Chomsky

Lenguaje Gramática Máquina Ejemplo
$L_{RE}/L_{Rec}$ Tipo 0
($\alpha \rightarrow \beta$)
Máquina de Turing, APDo, AC ??
$L_{DC}$ Tipo 1
($\alpha V \beta \rightarrow \alpha \gamma \beta$)
Autómata lineal con fronteras $ww, a^nb^nc^n$
$L_{LC}$ Tipo 2
($V\rightarrow \alpha$)
Autómata de pila $ww^r, a^nb^n$
$L_{reg}$ Tipo 3
($V \rightarrow aA|\epsilon$)
Autómata finito $w, a^*$

Lo que sabemos

Las máquinas que al pasar por un estado final terminan aceptando la cadena, otras que no tienen una transición y rechazan la cadena, pero de vez en cuando se pueden quedar en un ciclo

Si la cadena debe ser aceptada por la MT, eventualmente llegará al estado aceptor; si la cadena debe ser rechazada puede llegué a una transición inexistente o se quede en un ciclo.

Las autómatas finitos, autómatas de pilas, autómatas con frontera lineal, son máquinas aceptoras: verdadero o falso


Entonces las MT contienen máquinas aceptoras

Codificación de una cadena

$\delta (q_i ,X_j ) = (q_k,X_l,D_m)$

  • Asignar a cada estado $Q$, a cada símbolo de $\Gamma$ y cada dirección un entero
  • Codificar cada entrada de la MT como $0^i10^j10^k10^l10^m$
  • Separar cada codificación con doble uno ($11$)

Ejemplo

  • $\delta(q_1,1)=(q_3,0,R)$ $0100100010100$
  • $\delta(q_3,0)=(q_1,1,R)$$0001010100100$
  • $\delta(q_3,1)=(q_2,0,R)$$00010010010100$
  • $\delta(q_3,B)=(q_3,1,L)$$0001000100010010$

Con $q_1=1, q_2=2, q_3=3; 0=1, 1=2, B=3; L=1, R=2$

01001000101001100010101001001100010010010100110001000100010010

Máquina de Turing Universal

It is possible to invent a single machine which can be used to compute any computable sequence. If this machine $U$ is supplied with a tape on the beginning of which is written the S.D ["standard description" of an action table] of some computing machine $M$, then $U$ will compute the same sequence as $M$.

Turing, 1936

Es posible inventar una máquina que pueda ser usada para computar cualquier secuencia computable. Si esta máquina $U$ se le provee con una cinta en la que al principio se le escribe la descripción estándar de una tabla de acción de alguna máquina $M$, entonces $U$ computará la misma secuencia que $M$

MTU: Máquina de Turing que puede simular una MT arbitraria

$M_u$

Lenguaje aceptado

$L_u=\{ mw | w\in L(M)\}$


El lenguaje máquinas y cadenas dónde la máquina acepta a la cadena

Por el momento, haremos la hipótesis que $M_u$ es recursivo/decidible

Realización, una MT es una cadena


Como cadena se podía presentar a una máquina de Turing universal

Las máquinas de Turing que se aceptan a si mismas


$L_\bar{d}=\{ m | m\in L(M)\}$

Las máquinas en realidad son un número, como número las podemos ordenar


Ordenadas, cada una corresponde a un número entero


Entonces,...

$m_0$ $m_1$ $m_2$ $m_3$ $m_4$ $\ldots$
$M_0$ T F F T F $\ldots$
$M_1$ F F F F F $\ldots$
$M_2$ T T T T T $\ldots$
$M_3$ F T F F F $\ldots$
$M_4$ T F T F F $\ldots$
$\ldots$ $\ldots$ $\ldots$ $\ldots$ $\ldots$ $\ldots$ $\ldots$
$m_0$ $m_1$ $m_2$ $m_3$ $m_4$ $\ldots$
$M_0$ T F F T F $\ldots$
$M_1$ F F F F F $\ldots$
$M_2$ T T T T T $\ldots$
$M_3$ F T F F F $\ldots$
$M_4$ T F T F F $\ldots$
$\ldots$ $\ldots$ $\ldots$ $\ldots$ $\ldots$ $\ldots$ $\ldots$

$\bar{M_d}$ $T$ $F$ $T$ $F$ $F$ $\ldots$
$m_0$ $m_1$ $m_2$ $m_3$ $m_4$ $\ldots$
$M_0$ F F F T F $\ldots$
$M_1$ F T F F F $\ldots$
$M_2$ T T F T T $\ldots$
$M_3$ F T F T F $\ldots$
$M_4$ T F T F T $\ldots$
$\ldots$ $\ldots$ $\ldots$ $\ldots$ $\ldots$ $\ldots$ $\ldots$
$M_d$ $F$ $T$ $F$ $T$ $T$ $\ldots$

El lenguaje de las máquinas que no se aceptan a si mismas $L_d=\{m | m \not \in L(M)\}$

Si es RE o Rec existe una máquina de Turing, $M_d$, ¿qué pasa con su descripción $m_d$?


Si $m_d \in L_d$, quiere decir que no se acepta a si misma, pero para eso $M_d$ tendría que aceptarla, que la hace una máquina que se acepta a si misma, contradicción


Si $m_d \not \in L_d$, quiere decir que se acepta a si misma, pero para eso $M_d$ no tendría que aceptarla, que la hace una máquina que no se acepta a si misma, contradicción

$L_d$ existe afuera de las máquinas de Turing

Lenguaje Gramática Máquina Ejemplo
No RE -- -- $L_d$
$L_{RE}/L_{Rec}$ Tipo 0
($\alpha \rightarrow \beta$)
Máquina de Turing, APDo, AC ??
$L_{DC}$ Tipo 1
($\alpha V \beta \rightarrow \alpha \gamma \beta$)
Autómata lineal con fronteras $ww, a^nb^nc^n$
$L_{LC}$ Tipo 2
($V\rightarrow \alpha$)
Autómata de pila $ww^r, a^nb^n$
$L_{reg}$ Tipo 3
($V \rightarrow aA|\epsilon$)
Autómata finito $w, a^*$

Lenguajes aceptados por máquinas aceptoras: recusivos o decidibles


¿Las máquinas de Turing son las máquinas aceptoras?


Sabemos que las máquinas Turing tiene un límite

Imaginemos

Complemento de todos los recursivos son recursivo

Lenguaje aceptado

$L_u=\{ mw | w \in L(m)\}$

¿Si pasamos nuestra numeración de $MT_i$?

Si $L_u$ es recursivo, su complemento también...

¿Si pasamos nuestra numeración de $MT_i$?

¡Aceptaría $L_d$! ¡No es posible! por lo tanto $L_u$ tiene algo raro

$L_u$ no es Rec pero RE

Lenguaje Gramática Máquina Ejemplo
No RE -- -- $L_d$
$L_{RE}/L_{Rec}$ Tipo 0
($\alpha \rightarrow \beta$)
Máquina de Turing, APDo, AC $L_u$/
$L_{DC}$ Tipo 1
($\alpha V \beta \rightarrow \alpha \gamma \beta$)
Autómata lineal con fronteras $ww, a^nb^nc^n$
$L_{LC}$ Tipo 2
($V\rightarrow \alpha$)
Autómata de pila $ww^r, a^nb^n$
$L_{reg}$ Tipo 3
($V \rightarrow aA|\epsilon$)
Autómata finito $w, a^*$

Sabemos que hay MT que son decidibles: verdadero y falso


Sabemos que hay problemas para los cuales no existe MT, $L_d$


Sabemos que hay MT que no son decidibles: verdadero, falso y ciclo

Opciones de una máquina de Turing

  • ¿Cuándo se acepta? Llega a estado aceptor
  • ¿Cuándo se rechaza? Llega a estado del que no hay transición dado el estado de la cinta
  • ¿Otra opción? Quedarse en un ciclo infinito

Modelo teórico: instantáneo

  • Aceptar (T) Llega a estado aceptor
  • Rechazar (F) Se queda en estado no aceptor
  • Loop infinito Rechazó o loopinfinito?

Modelo práctico: tiempo

  • Aceptar (T) En algún momento llega a estado aceptor
  • Rechazar (F) En algún momento llega a estado no aceptor
  • Loop infinito No termina nunca

Ante problemas muy, muy difíciles, no sabemos si sigue procesando o está en un loop infinito

Ejemplo de problema muy muy difícil

De un conjunto de números enteros de tamaño $N$ ¿existe una combinación del subconjuntos de ellos que sume $C$?

¿Cómo se diseña la MT?

  • $N=1, 2^1*1 = 2 = 2ns$
  • $N=2, 2^2*2 = 8 = 8ns$
  • $N=3, 2^3*3 = 24 = 24ns$
  • $N=10, 2^10*10 = 10,240 = 10 micros$
  • $N=20, 2^20*20 = 20,971,520 = 2 milis$
  • $N=30, 2^30*30 = 32,212,254,720 = 32 s$
  • $N=40, 2^40*40 = 43,980,465,111,040 = 12 h$
  • $N=50, 2^50*50 = 56,294,995,342,131,200 = 651 d$

¿Por qué mi programa tiene un loop?

  • Por diseño, loops son importantes desde lenguajes regulares


¿Por qué mi programa tiene un loop infinito?

  • Un error
  • Por diseño, interfaz gráfica, satélites, switches, robots

Hecho de la computación: los loops son básicos en la computación


Pero nos meten en problemas rápidamente

¿Qué hay de lenguajes recursivos?

El lenguaje de las máquinas y cadenas que se aceptan en $n$ pasos


$L_n=\{mw | w\in L(M) \text{ en }n\text{ pasos} \}$

Enumeremos todas las codificaciones de automatas lineales con frontera (MT) decidibles, $\{M_1,M_2,\ldots\}$

Enumeramos todas las cadenas de $\Sigma^*$

$L_\bar{f}=\{x_i | x_i\not\in L(M_i) \}$

  • Si $L_\bar{f}$ fuera sensitivo al contexto, una de máquina $M_x$ aceptaría a todas las cadenas dentro de $L_\bar{f}$, que va encontra de la definición. Por lo tanto no es sensitivo al contexo.
  • Sin embargo, si es decidible ya que la máquina $M_\bar{f}$ lo único que tiene que hacer es simular a cada $M_i$ con $x_i$ (es decir, es universal), pero no se queda trabada porque se trata de máquinas decidibles
Lenguaje Gramática Máquina Ejemplo
No RE -- -- $L_d$
$L_{RE}/L_{Rec}$ Tipo 0
($\alpha \rightarrow \beta$)
Máquina de Turing, APDo, AC $L_u$/$L_n$,$L_\bar{f}$
$L_{DC}$ Tipo 1
($\alpha V \beta \rightarrow \alpha \gamma \beta$)
Autómata lineal con fronteras $ww, a^nb^nc^n$
$L_{LC}$ Tipo 2
($V\rightarrow \alpha$)
Autómata de pila $ww^r, a^nb^n$
$L_{reg}$ Tipo 3
($V \rightarrow aA|\epsilon$)
Autómata finito $w, a^*$

La tesis de Turing-Church (relajada)

Toda computación real puede ser transformada a una máquina de Turing

La tesis de Turing-Church

Toda computación efectiva puede llevarse a cabo por una máquina de Turing

Método efectivo, M

  • $M$ está compuesto por un número finito de instrucciones
  • $M$ cuando llevado a cabo sin error siempre produce el resultado deseado en un número finito de pasos
  • $M$ puede llevarse a cabo por un humano sin la necesidad de una computadora, pero con lápiz y papel
  • $M$ no necesita de conocimiento externo o ingenuidad de parte del humano que lo ejecuta

Evidencia

  • Toda función efectivamente calculable se ha comprobado ser una máquina de Turing
  • Todos los métodos para obtener nuevas funciones efectivamente calculables tienen un equivalente en máquina de Turing
  • Todos los intentos de formalizar la noción intuitiva de efectivamente calculable han resultado en el mismo conjunto, recursivo enumerable

Otras formalizaciones

  • Cálculo lambda
  • Gramática tipo 0
  • Funciones parciales recursivas
  • Algoritmos Post
  • Forma canónica Post
  • Algoritmos de Markov

Variaciones

  • Todas las funciones físicas computables son Turing-computable
  • Una máquina probabilistica de Turing puede simular eficientemente cualquier modelo razonable de computación
  • Máquinas razonables pueden simularse las unas a las otras con un exceso polinomial en tiempo y un factor constante en espacio
  • Una máquina de Turing cuántica puede simular eficientemente cualquier modelo realista de computación
  • Problemas computables, RE
  • Problemas no computables, NRE, $L_d$
Lenguaje Gramática Máquina Ejemplo
No RE -- -- $L_d$
$L_{RE}/L_{Rec}$ Tipo 0
($\alpha \rightarrow \beta$)
Máquina de Turing, APDo, AC $L_u$/$L_n$,$L_\bar{f}$
$L_{DC}$ Tipo 1
($\alpha V \beta \rightarrow \alpha \gamma \beta$)
Autómata lineal con fronteras $ww, a^nb^nc^n$
$L_{LC}$ Tipo 2
($V\rightarrow \alpha$)
Autómata de pila $ww^r, a^nb^n$
$L_{reg}$ Tipo 3
($V \rightarrow aA|\epsilon$)
Autómata finito $w, a^*$

Lenguajes decidibles

Suma

¿Dado dos número en notación unaria, verificar que se puedan sumar?


Los sumamos


Muy fácil, $O(n+m)$

Verificación de suma

¿Dado tres números en notación unaria, verificar que el último sea la suma de los dos primeros?


Los sumamos y comprobamos que sean el mismo valor


Muy fácil, $O(n+m)$

Multiplicación

¿Dado dos número en notación unaria, verificar que se puedan multiplicar?


Los multiplicamos


Más o menos fácil, $O(n*m)$ (naive)

Verificación de multiplicación

¿Dado tres número en notación unaria, verificar que el último sea producto de los dos primeros?


Los multiplicamos y comprobamos que sean el mismo valor


Más o menos fácil, $O(n*m)$ (naive)

Verificar número primos

¿Dado un número en notación unaria, es primo?


Dividir número entre factores de $2$ hasta $\sqrt{n}$


¡Más o meno algo de tiempo! $O(\sqrt{n})$

Identificar factores

¿Dado un número en notación unaria, identificar si es divisible entre dos factores primos?


Encontrar un par de primos menores a $n$ que produzcan el número n


¡Más dificil! $O(\frac{n*\sqrt(n)}{log(n)^2})$

Verificación factor

¿Dado tres número en notación unaria, verificar que el último sea el producto de los dos primeros?


Los multiplicamos y comprobamos que sean el mismo valor


Más o menos fácil, $O(n*m)$ (naive)

  • Sacar un elemento de un arreglo $O(n)$
  • Sacar un elemento de un ábol B $O(log(n))$
  • Verificar que mi usuario esté en la base de datos $O(n)$

Nuestro talón de aquiles comienza con que el complemento de decidibles son decidibles

Lenguajes no decidibles

Problema del paro

Existe una máquina de Turing $M_h$ que pueda tomar cualquier máquina $M$ y una entrada $w$ y pueda determinar si el programa para.


La respuesta es NO

Definición de halt

$$M_h(M,w) = \begin{cases} 1 & \text{si } M \text{ para con entrada } w \\ 0 & \text{otherwise} \end{cases}$$

La función computable (no decidible)

$$ M_g(i) = \begin{cases} 0 & \text{si } M(i,i)=0 \\ loop & \text{otherwise} \end{cases}$$

Sabemos que es computable

Dos opciones

¿Qué $M$ define a $M_h$?

Si $M(M_g,M_g)=0$ entonces $M_g(M_g)=0$, entonces $M_h(M_g,M_g)=1$

Si $M(M_g,M_g)=1$ entonces $M_g(M_g)$ loops, entonces $M_h(M_g,M_g)=0$


Entonces asumimos mal que $M_h$ era decidible

Uno de los primeros problemas descubiertos ser no decidibles


Es común transformar problemas al problema de paro para demostrar que también son no decidibles

Teorema de Rice

Toda propiedad no trivial de los lenguajes RE es indecidible

  • Todo conjunto de lenguajes de RE es una propiedad
  • $\emptyset$ y RE son propiedades triviales
  • El conjunto de $M$ que regresan verdadero para toda $w$
  • El conjunto de $M$ que no aceptan al lenguaje vacio
  • El conjunto de $M$ que corresponde a un lenguajes libres de contexto
  • La app va a vigilarme
  • La app va alentar mi celular
  • La app va a pasmarse

No recursivamente enumerables

Nuestro talón de aquiles continua con que hay problemas para los cuales no hay una MT


  • $L$ y $\overline{L}$ son Rec
  • $L\in RE \bigcap \overline{R} $ y $\overline{L}$ no en RE

Los complementos de RE

  • $h=\{[M,w] | w \in L(M) \text{ y para} \}$
  • $\overline{h}=\{[M,w] | w \in L(M) \text{no para si }M\text{ es una máquina de Turing o}$ $M\text{ no es una Máquina de Turing}$
  • El conjunto de $M$ que regresan falso para toda $w$ o $M$ no es una MT
  • El conjunto de $M$ que aceptan al lenguaje vacio o $M$ no es una MT
  • El conjunto de $M$ que corresponde a los lenguajes no son libres de contexto o $M$ no es una MT
  • La app no va a vigilarme
  • La app no va alentar mi celular
  • La app no va a pasmarse
Lenguaje Gramática Máquina Ejemplo
No RE -- -- $L_d,L_{\bar{h}}$
$L_{RE}/L_{Rec}$ Tipo 0
($\alpha \rightarrow \beta$)
Máquina de Turing, APDo, AC $L_u$,$L_h$/$L_n$,$L_\bar{f}$
$L_{DC}$ Tipo 1
($\alpha V \beta \rightarrow \alpha \gamma \beta$)
Autómata lineal con fronteras $ww, a^nb^nc^n$
$L_{LC}$ Tipo 2
($V\rightarrow \alpha$)
Autómata de pila $ww^r, a^nb^n$
$L_{reg}$ Tipo 3
($V \rightarrow aA|\epsilon$)
Autómata finito $w, a^*$

Reducción

Un problema $A$ se reduce a $B$, $A \le B$

Función de reducción

  • Una función $f(w)$
  • $A$ se reduce a $B$ si $w\in A$ si y sólo si $f(w) \in B$
  • Sí $w\in A$ entonces $f(w)\in B$
  • Sí $w\not\in A$ entonces $f(w)\not\in B$

Pequeño problema

Considerar $L_D$ y reducir a $0^*1^*$

  • Sí $w\in L_D$ entonces $f(w)= 01$
  • Sí $w\not\in L_D$ entonces $f(w)= 10$

¿Entonces reducimos $L_D$ a regular?

$f$ tiene que ser computable

Reducción

Máquina R

Con la entrada $w$

  • Calcular $f(w)$
  • Correr $M_B$ en $f(w)$
  • Si $M_B$ acepta $f(w)$, entonces aceptar $w$
  • Si $M_B$ rechaza $f(w)$, entonces rechazar $w$

Notación $A\le_M B$, $A$ es reducible a $B$

Propiedades

  • Si A, entonces $A \le B$
  • Si A,B y C entonces $A \le B$ y $B \le C$ entonces $A \le C$

Informalemente, A no es más difícil que B

Reducciones famosas

  • $HALT \le L_u$
  • $L_u \le HALT$
  • $HALT \le DECIDER$ donde $\{ m | \text{is a decider} \}$
  • $L_u \le ONES$ donde $\{m | m\text{ acepta w con forma } 1^n\}$
  • $L_d \le ONLYONES$ donde $\{m | L(m) \subseteq 1^*\}$
  • $L_d \le \overline{ONLYONES}$ donde $\{m | L(m) \not \subseteq 1^*\}$

Opciones

Si $A\le_MB$

  • Si $B$ es decidible, entonces $A$ lo es
  • Si $B$ es computable, entonces $A$ lo es
  • Si $A$ es indecidible, entonces $B$ lo es
  • Si $A$ es no es computable (no RE), entonces $B$ lo es

Dónde quedan en la jerarquía extendida

  • $HALT \le L_u$
  • $L_u \le HALT$
  • $HALT \le DECIDER$ donde $\{ m | \text{is a decider} \}$
  • $L_u \le ONES$ donde $\{m | m\text{ acepta w con forma } 1^n\}$
  • $L_d \le ONLYONES$ donde $\{m | L(m) \subseteq 1^*\}$
  • $L_u \le \overline{ONLYONES}$ donde $\{m | L(m) \not \subseteq 1^*\}$

El poder de tener la respuesta

  • $ONES$ si me dan una respuesta válida $m,1^n$, es fácil de checar
  • $ONES$ si me dan una inválida $m,1^n$, no es tan fácil de checar (loop)
  • $\overline{ONLYONES}$ si me dan una respuesta inválida $m,\not = 1^n$, es fácil de checar
  • $\overline{ONLYONES}$ si me dan una respuesta válida $m,1^n$, no es fácil de checar (loop)

RE y co-RE

RE es el conjunto de lenguajes reconocidos por una máquina de Turing

Problemas para los cuales verificamos una respuesta correcta


co-RE es el conjunto de lenguajes cuyos complementso son reconocidos por una máquina de Turing

Problemas para los cuales verificamos una respuesta incorrecta

RE y co-RE

  • Si $L\in RE$ y $\overline{L} \in RE$, entonces $L\in Rec$
  • Si $L\in RE$ y $\overline{L} \in coRE$, entonces $L\in Rec$
  • Si $L\not\in R$ y ${L}\in RE$, entonces $L\not\in co-RE$
  • Si $L\not\in R$ y ${L}\in co-RE$, entonces $L\not\in RE$

¿Qué sabemos de este lenguaje?



$REGULAR=\{[M] | L(M)\text{ es regular}\}$


$L_D\le_M REGULAR$


REGULAR es no RE, pero


$\overline{L_D}\le_M REGULAR$

$REGULAR$ y $\overline{REGULAR}$ afuera de los límites de lo computable


¿Otro afuera?



$EQ_{TM}=\{[M_1,M_2] | L(M_1) = L(M_2)\}$


Lenguaje Gramática Máquina Ejemplo
Más alla/No RE -- -- $REGULAR, \overline{REGULAR}, L_{EQ}$
co-RE/No RE -- -- $\overline{L_u},L_D, \overline{ONES}, ONLYONES$
$L_{RE}/L_{Rec}$ Tipo 0
($\alpha \rightarrow \beta$)
Máquina de Turing, APDo, AC $L_u,\overline{L_D}, ONES, \overline{ONLYONES}$/$L_n$,$L_\bar{f}$
$L_{DC}$ Tipo 1
($\alpha V \beta \rightarrow \alpha \gamma \beta$)
Autómata lineal con fronteras $ww, a^nb^nc^n$
$L_{LC}$ Tipo 2
($V\rightarrow \alpha$)
Autómata de pila $ww^r, a^nb^n$
$L_{reg}$ Tipo 3
($V \rightarrow aA|\epsilon$)
Autómata finito $w, a^*$

Resumen: Church-Turing tesis

  • Rec: problemas que pueden ser calculados por una computadora
  • RE: problemas donde respuestas pueden ser verificados por una computadora
  • co-RE: problemas donde respuestas pueden ser refutadas por una computadora
Licencia de Creative Commons
Máquinas de Turing o máquinas con cola by Ivan V. Meza Ruiz is licensed under a Creative Commons Reconocimiento 4.0 Internacional License.
Creado a partir de la obra en http://turing.iimas.unam.mx/~ivanvladimir/slides/lfya/mt.html.