Toda computación real puede ser transformada a una máquina de Turing
Toda computación efectiva puede llevarse a cabo por una máquina 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_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^*$ |
¿Dado dos número en notación unaria, verificar que se puedan sumar?
Los sumamos
Muy fácil, $O(n+m)$
¿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)$
¿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)
¿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)
¿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})$
¿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})$
¿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)
Nuestro talón de aquiles comienza con que el complemento de decidibles son decidibles
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
$$M_h(M,w) = \begin{cases} 1 & \text{si } M \text{ para con entrada } w \\ 0 & \text{otherwise} \end{cases}$$
$$ M_g(i) = \begin{cases} 0 & \text{si } M(i,i)=0 \\ loop & \text{otherwise} \end{cases}$$
Sabemos que es computable
¿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
Toda propiedad no trivial de los lenguajes RE es indecidible
Nuestro talón de aquiles continua con que hay problemas para los cuales no hay una MT
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^*$ |