Está en la página 1de 16

Diagonalización: el problema de parada

La existencia de máquinas universales muestra que la forma en que operamos


de manera efectiva cuando procedemos como una de éstas máquinas cae bajo el
alcance de un tipo de fenómeno muy general rodeado, con bastante justicia, de una
mala prensa: el fenómeno de la autorreferencia. Esto mismo se puede expresar de
forma más simple diciendo que las máquinas de Turing poseen la capacidad expresiva
suficiente como para adquirir conductas autorreferenciales. Pero, ¿qué es la
autorreferencia? En esta ocasión es mejor empezar por un ejemplo:

[1] i.”Madrid” tiene cinco letras


ii. Este enunciado es falso
iii. G syss no es demostrable [G],
etc...

Todos ellos son enunciados que contienen una cierta dosis de autorreferencia.
Grosso modo, se trata de un fenómeno por el cual un cierto rango de recursos
expresivos posee potencia suficiente como para crear expresiones que hacen
referencia a otras expresiones pertenecientes a ese mismo rango de recursos. No sólo
es un problema lingüístico: la conciencia, por ejemplo, se interpreta en ocasiones
como un tipo de cognición que tiene como objeto al propio sujeto que las genera.

La mala fama de la autorreferencia se justifica por su habilidad para intervenir


en la formación de paradojas. “Este enunciado es falso”, “el conjunto formado por
todos los conjuntos que no se pertenecen a sí mismos” –paradoja de Russell-, la
paradoja de Berry, la de Richard, y tantas otras son ejemplos de ello. ¿Cómo afecta
Lógica y Computabilidad

esta situación al cálculo de funciones –a la ejecución de tareas efectivas- mediante


máquinas de Turing? Para estudiar este problema se hace necesario presentar una
técnica conocida por el nombre de diagonalización. Se trata de un procedimiento que
investiga el efecto de la autorreferencia sobre aquella clase de objetos en la cual se ha
observado su presencia. El primero en emplear este procedimiento de forma
consciente y sistemática fue el matemático alemán Georg Cantor a finales del siglo xix.
De hecho, es frecuente hablar de “diagonal de Cantor” para referirse a esta
construcción. En su caso fue empleado para demostrar la existencia de números
reales que no pueden ser representados mediante ninguna secuencia finita de
símbolos, ni reducidos a ninguna descripción o construcción finita. Cantor demuestra,
en definitiva que el conjunto  de los números reales tiene un cardinal estrictamente
mayor que el de los números naturales . Si representamos mediante el símbolo  el
cardinal de , el cardinal de  se puede representar como 2: Cantor vino entonces a
establecer que <2.

El caso de Cantor no parece poseer una repercusión inmediata para el


problema que aquí nos preocupa. Sin embargo, existen versiones de su
argumentación qué sí son útiles para nuestro problema y que permiten, además, una
buena introducción al uso de las técnicas de diagonalización. Se trata de responder a
la pregunta de cuántas funciones numéricas hay definidas sobre los naturales. En la
medida en que las máquinas de Turing, y con ello nuestro modelo de la efectividad,
calculan este tipo de funciones, la cuestión nos afecta y mucho. En principio
consideraremos que una función es una aplicación que a cada elemento del conjunto
de partida le asigna uno y sólo uno en el conjunto de llegada. Así expresado, cabe
descartar la existencia de elementos del conjunto de partida sin valor. Este tipo de
funciones tienden a denominarse en la actualidad funciones totales o totalmente
definidas. El argumento diagonal que se utiliza parte de considerar como hipótesis la
existencia de un número infinito de tales funciones que no excede al de números
naturales. Es decir, consideramos la existencia de una cantidad infinita enumerable de
tales funciones. Todo argumento diagonal se basa en la construcción de una matriz –
la matriz de diagonalización- mediante la que se pretende representar completamente

320
Diagonalización: el problema de parada

la clase de objetos aludida. Buena parte del éxito de una de estas demostraciones
depende de la fortuna de esta construcción. La matriz que se introduce a continuación
se refiere a la clase de funciones numéricas totales de un solo argumento definidas
para los naturales, clase que se simboliza como .

[2] Matriz de diagonalización M para :

0 1 2 3 4 ...

f0 x00 x01 x02 x03 x04 ...

f1 x10 x11 x12 x13 x14 ...

....

fi xi0 xi1 xi2 xi3 xi4 ...

....

Cada uno de los símbolos del tipo fi representa una función en la clase ,
mientras que la fila que figura justo encima de la línea continua indica la serie de los
naturales. Hechas estas aclaraciones, es fácil entender por qué afirmamos que la
secuencia infinita <xi0, xi1, xi2, xi3, xi4,...> representa el curso de valores, en este caso,
de la i-ésima función de ese tipo. La hipótesis de que  es una clase enumerable
queda recogida en la representación de la lista de funciones que aparecen en la
columna de la izquierda. Obsérvese, además, que el uso de subíndices para
diferenciar unas de otras basta para saber que existen tantas como subíndices, y

321
Lógica y Computabilidad

puesto que estos son números naturales consideramos tantas funciones en  como
números naturales.
Una vez obtenida esta matriz, la técnica de diagonalización prosigue intentado
emplear esa representación para construir una pareja de objetos, conocidos como
objeto diagonal y objeto antidiagonal. Estos se caracterizan por mostrar un conflicto
entre su posible pertenencia a  y su presencia en la matriz M.

[3] Construcción de los objetos diagonal y antidiagonal.

i. El objeto diagonal  se define como:

- =<x00, x11,... xii,...>

ii. El objeto antidiagonal * se define como:

- *=<x*00, x*11,... x*ii,...>, donde x*ii es cualquier entero


positivo distinto a aquel que corresponde a xii en .

 y * son construcciones obtenidas directamente a partir a la matriz M. En


esto difieren de las funciones numéricas fi que hemos representado en la matriz, cuya
existencia se supone previa y por tanto, independiente a la existencia de esa
construcción.

[4] Teorema: Si , entonces *

Esquema de demostración: Siempre es posible imaginar una condición tan


trivial como se quiera para obtener cada x*ii a partir de cada xii en . En este
caso, basta con definir x*ii=xii+1.

322
Diagonalización: el problema de parada

Pero no hace falta pensar mucho para darse cuenta de lo siguiente:


[5] Teorema: * M.

Esquema de demostración: Supongamos que contrariamente a lo que


se establece en el enunciado del teorema, * sí está en la matriz. Eso
implica que es alguna de las funciones representadas en la columna de
la izquierda. Supongamos que * es la j-ésima de ellas, esto es, *=fj.
Por tanto, *=<xj0, xj1,...xjj,...>. Ahora bien, por definición, * ha sido
obtenida a partir de  alterando el valor de los xii. Esto hace que se
presente un conflicto en el caso de xjj, ya que por ser el resultado de esa
operación xjj=x*jj, pero como la única condición impuesta sobre x*jj es
que x*jjxjj alcanzamos una contradicción. Debemos concluir, por tanto,
que * M.

La conclusión de todo este proceso se puede expresar ahora de una forma


sumamente compacta mediante un teorema que recoge muy bien el tipo de limitación
ante la cual nos dispone la técnica de diagonalización.

[6] Teorema (Teorema de Diagonalización): Si , entonces M no


constituye una representación completa de .

Esquema de demostración: Si , entonces, por [4], *. Puesto


que acabamos de establecer en [5] que * M, debemos concluir que
hay objetos en  que carecen de una representación adecuada en M.

323
Lógica y Computabilidad

[7] Corolario: Si , entonces  carece de una enumeración efectiva de


sus elementos.

Esquema de demostración: Basta observar que la construcción de la


matriz de diagonalización no depende de ningún otro supuesto que la
posibilidad de enumerar efectivamente los elementos de .

La forma en que he decidido presentar el Teorema de Diagonalización es algo


más general y amplia que lo que suele ser habitual. Obsérvese que lo único que se
establece es una conexión entre dos enunciados que cabe evaluar por separado. El
caso al que nos enfrentamos se inicia al considerar la hipótesis de que la clase 
formada por todas las funciones numéricas es enumerable. No es algo de lo que
tengamos evidencia previa. Podría suceder, sin embargo, que la forma en que hemos
obtenido  a partir de la matriz de diagonalización violase alguna condición de orden
formal o intuitivo que sabemos asociada a todos los elementos que forman la clase 
considerada. La noción de función es tan básica y elemental que nada parece
interponerse en la aceptación de , no ya como una representación adecuada de una
función, sino como una función numérica que tiene como definición esa
representación. Concluimos por tanto que:

[8] Corolario: La clase de las funciones numéricas totalmente definidas


establecidas sobre números naturales no es efectivamente enumerable.

Esquema de demostración: Simplemente aceptamos que el objeto


diagonal constituye una representación aceptable y una definición
plausible de un objeto propio de la clase de tales funciones y aplicamos
el corolario enunciado en [7].

324
Diagonalización: el problema de parada

Es posible que el desarrollo de esta demostración no deje ver con entera


claridad el papel que en este caso desempeña la autorreferencia. El problema es fácil
de resolver. Estamos hablando de funciones numéricas a las cuales pretendemos
adjudicarle un nombre que, en este caso es un número, un subíndice que permite
situarla en una serie con un cierto tamaño. Esta es la dosis de autorreferencia que se
precisa para el caso.

Lo que hemos establecido en esta sesión tiene un doble objetivo. En primer


lugar, nos familiariza con el tópico de la autorreferencia y con la construcción de un
argumento de tipo diagonal. En segundo lugar, nos pone ante un difícil brete por lo que
hace al problema del desarrollo efectivo de tareas. En la medida en que aspiramos a
que toda tarea relativa a números posea una descripción finita en términos de alguna
máquina de Turing, hemos de asumir que la colección formada por todas ellas tiene un
tamaño que no puede exceder al de máquinas. ¿Significa esto que dicha clase ha de
ser incompleta en el sentido que el Teorema de Diagonalización parece indicar?
Acabamos de demostrar que las funciones numéricas definibles sobre los enteros
positivos no son efectivamente enumerables. ¡Tanto peor para los enteros positivos y
para las funciones que operan con ellos! En la medida en que sólo deseemos tratar
con funciones numéricas explícitamente asociadas a un procedimiento de cálculo nada
de esto parece afectarnos de manera preocupante. Sabemos por el teorema de
enumerabilidad que existe sólo una cantidad enumerable –efectivamente enumerable-
de maquinas que computan funciones numéricas, por tanto, la clase de tales funciones
es enumerable quedando garantizado aquello mismo que en la sesión anterior
constituía una hipótesis –en el caso de todas las funciones numéricas-.

Todo parece indicar que el resultado de no enumerabilidad obtenido resulta


sólo un bonito divertimento matemático con poca aplicación a la descripción y análisis
de la noción de tarea efectiva, en cuyo interior, y como cabe esperar, todo posee un
comportamiento previsible y siempre bajo control. Church y Kleene sabían muy bien
que no era así. Basta repasar brevemente el Teorema de Diagonalización para darse

325
Lógica y Computabilidad

cuenta de la razón. Su enunciado parece aplicable a cualquier clase de objetos para


los cuales existe una descripción finita, transformándose entonces en un resultado de
incompletitud. Entendido en esos términos tiene un efecto absolutamente nocivo sobre
el problema de la descripción formal de la noción de tarea efectiva, al punto de parecer
indicar la imposibilidad de comprimir todas las funciones numéricas calculables de
manera efectiva dentro de la clase de las funciones computables. Y no sólo eso, sino
dentro de cualquier otra clase cuyos objetos puedan ser descritos de manera finita.

La legítima aspiración a describir todas las tareas que ejecutamos de forma


efectiva, mecánica o algorítmica, mediante un lenguaje formal dotado de un rango de
recursos restringido se mostraría entonces incorrecta, obligándonos a reconocer una
limitación de gran alcance epistemológico. Tanto como para poder afirmar la existencia
de tareas que somos capaces de ejecutar de manera efectiva pero cuya descripción
no podemos completar de modo alguno. El avance de los resultados de limitación en
diversos dominios de la Lógica y la Matemática de principios de siglo parecía
imparable. La vigencia de la capacidad de los formalismos para describir
completamente clases de objetos relevantes se ve comprometida por una cascada de
ejemplos en contrario. ¿Por qué iba a ser menos la noción de tarea efectiva? Durante
algún tiempo Church y Kleene desarrollan su investigación con el temor de que así
sea, al punto de que es posible y razonable, incluso, entender su análisis de la
efectividad como el estudio de las condiciones de posibilidad que permiten que la
descripción finita de la clase de funciones computables constituya una descripción
completa de esa clase de objetos.

Church aprecia que el argumento diagonal es perfectamente reproducible


cuando la clase  es la clase de aquellas funciones numéricas que disponen de una
descripción algorítmica finita en un lenguaje formal con recursos limitados –poco
importa de qué lenguaje se trate-. Los objetos diagonal y antidiagonal son ejemplos de
funciones calculables que no pueden ser incorporadas en el mismo lenguaje en que
han sido descritas aquellas que generan la matriz de diagonalización y con ello esos
mismos objetos. Salvo, y este es el momento de genialidad de Church, que entre esa
clase de funciones existan algunas que no son calculables en el mismo sentido que las

326
Diagonalización: el problema de parada

demás. Esas funciones habrían de dejar sin valor a algunos de sus argumentos pese a
disponer de una descripción finita en el mismo lenguaje que las restantes. Además, no
debería ser posible identificar qué funciones incurren en esa circunstancia analizando
su descripción, ya que en ese caso el argumento se reproduciría de nuevo generando
incompletitud. Nada de esto es firme, opina Church, sino tan sólo las condiciones que
el problema tiene analizado desde el punto de vista más general y abstracto. Podría
existir una forma de identificar aquellas funciones que gozan de una descripción finita
y no asignan valor a algunos de sus argumentos y ahí acabaría todo. En mi opinión es
Kleene el primero que se convence mediante un argumento sólido de que ese
inquietante procedimiento no existe, pero esa no es historia para contar aquí.

Lo que sí me interesa es aclarar que en cierto modo ya está en el aire el conflicto entre
descripción finita de funciones numéricas –tareas efectivas-, la completitud de esa
clase con respecto al concepto intuitivo subyacente, y la necesidad de cambiar nuestra
idea naïve de efectividad. Si queremos tener una descripción completa de la clase de
las tareas efectivas tal vez sea necesario irse acostumbrando a considerar como
efectivas tareas que no siempre dan respuesta a algunas preguntas.

Este argumento, que en el caso de Church y Kleene, es extremadamente


abstracto se transforma en algo totalmente tangible en el caso de Turing, dando lugar
a uno de los resultados más famosos en Lógica y Teoría de la Computación: el
llamado problema de parada. ¿En qué consiste este presunto problema? Básicamente
en demostrar la inexistencia del procedimiento al que Church alude y cuya definibilidad
impediría pensar en una descripción completa de la clase de las tareas efectivas. Sin
embargo, lo que vamos a probar tiene lugar dentro del formalismos de las máquinas
de Turing: ¿qué máquina existe o deja de existir para que las cosas encajen de esta
manera?

En el capítulo anterior se estableció la existencia de máquinas universales. Una


máquina universal U(x,y) se comporta a todos los efectos como Mx(y), es decir, como
la máquina con índice x. La idea, según parece, es que una de estas máquinas puede
imitar o reproducir la conducta de cualquier otra generando de este modo una especie

327
Lógica y Computabilidad

de impresión de control sobre la rutina que cada máquina genuina ejecuta. Si existen
máquinas que imitan la conducta de cualesquiera otras al punto de tomar como valor
los que éstas últimas arrojan, no veo por qué no puede existir otra, mucho más
modesta, que se conforma con decir si la máquina imitada arroja o no valor para el
input que calcula. En términos absolutamente precisos lo que se postula es la
existencia de una máquina definida como:

[9] Máquina del problema de parada:

- Up(x,y1,...yn)=1, si Mx(y1,...yn) se detiene en una parada estándar


arrojando in output para la n-tupla <y1,...yn>,
=0, en otro caso.

Recuérdese que al definir la conducta de una maquina de Turing, no pudimos


dar fe de que su conducta llevase siempre a alcanzar una situación de parada
estándar. La rutina puede entrar en un bucle o puede alcanzar una instrucción de
parada en posición no estándar. De lo que se trata, pues, es de diseñar una máquina
que prevea estas circunstancias avisando se cuándo tienen lugar. Una mirada a las
condiciones generales del problema puede hacer pensar que esta máquina no sólo
existe, sino que su existencia es asunto trivial: se le pide mucho menos que a la
máquina universal cuya conducta sabemos que tiene cabida entre las máquinas de
Turing. Sin embargo, es obvio que tanto U(x,y1,...yn) como Up(x,y1,...yn) admiten unas
dosis de autorreferencia que es preciso tener en cuenta. ¿Puede llevar esta situación
a malograr la definición de Up(x,y1,...yn), o lo que es peor aún, a producir paradojas?

328
Diagonalización: el problema de parada

[10] Teorema (Turing, 1936-37). Problema de Parada: La máquina


Up(x,y1,...yn) no puede ser definida de manera consistente para el
formalismo de las máquinas de Turing.

Esquema de la demostración: Como es frecuente en estas ocasiones,


supondremos que Up(x,y1,...yn) existe. Para simplificar nuestras
consideraciones, tomaremos como ejemplo de máquina Up(x,y). Si esta
máquina puede ser definida en el formalismo de las máquinas de
Turing, entonces, también lo estará aquella que en que siempre se toma
y=x, o dicho de otra forma, aquella que representaríamos como Up(x,x).
A partir de este dato definimos una máquina D*(x) como sigue:

D*(x)=1, si Up(x,x)=0
entra en un bucle en otro caso.

Lo primero que hay que establecer es la existencia de esta máquina.


Puesto que partimos de la existencia de Up(x,x) bastará mostrar qué
fragmento hay que añadir para obtener D*(x). Puesto que Up(x,x) está
definida por hipótesis para todos los casos, basta con añadir una
instrucción que cambie el contenido de la cinta al valor “1” si encuentra
el valor “0” y que inicie un desplazamiento indefinido a la derecha, por
ejemplo, si encuentra el valor “1”. Por tanto, si Up(x,x) existe, D*(x)
también. Por el teorema de enumerabilidad podemos conjeturar
entonces que D*(x) tiene un índice, sea éste i, de tal modo que
D*(x)=Mi(x). A continuación vamos a comprobar cómo se comporta esta
máquina para x=i. Por su definición, D*(x) admite sólo dos posibilidades:

Caso 1 : D*(i)=1. Por su definición, esto nos lleva a suponer que


Up(i,i)=0, lo cual implica, por la definición esta vez de Up(x,x), que el
valor de la máquina Mi no está definido cuando x=i, es decir, que Mi(i)
no está definida. Ahora bien, por la definición de D*, D*(x)=Mi(x), eso

329
Lógica y Computabilidad

significa que D*(i) no está definido, obteniéndose en este caso una


contradicción.
Caso 2: D*(i) entra en un bucle. Por tanto, Mi(i) entra en un bucle, de
donde se sigue que Up(i,i)=0. Pero si esto es así, entonces por la
definición de D*(x), D*(i)=1, alcanzándose de nuevo una contradicción.

Puesto que no hay más opciones para x=i y ambas conducen a


contradicción, hemos de concluir que D*(x) no es definible en el
formalismo de las máquinas de Turing. Pero si D*(x) no es definible,
entonces tampoco lo Up(x,x) ni Up(x,y), quedando así establecido el
enunciado del teorema.

No precisa mucho comentario el nombre que generalmente recibe este


resultado, problema de parada. No obstante, y pese a que la forma, deliberadamente
intuitiva, que aquí tiene esta demostración pueda ocultar un tanto la similitud, no se
trata sino de una versión del Teorema de Diagonalización que ya habíamos
establecido previamente. El parecido entre D*(x) y el objeto antidiagonal d* no es
casualidad: D*(x) es el objeto antidiagonal en este caso. Por tanto, se trata del tipo de
análisis que la técnica de diagonalización hace de la capacidad que un medio
expresivo posee de generar paradojas, una vez se advierte que es lo suficientemente
potente como para exhibir instancias de autorreferencia

Lo que [10] establece es la inexistencia de un procedimiento mecánico –si


aquellos que las máquinas de Turing ilustran lo son- que permita determinar, en
general, si uno de estos procedimientos finaliza o no en tiempo finito. Esto no significa
que dada una rutina o máquina particular no podamos demostrar que está definida
para todos los casos relevantes, o que existen unos, que es posible establecer, para
los que no lo está. Lo que se afirma en el resultado anterior es que ese control sobre la
rutina que uno ejecuta no se puede extender a toda la clase de tareas que son
definibles por medio de máquinas de Turing. En otras palabras, hay tareas y

330
Diagonalización: el problema de parada

determinados valores dentro del rango de aquellos sobre los que opera en principio
para los cuales es imposible distinguir lo siguiente:

[11] i. Aún no se ha alcanzado el final de esa rutina, aunque tal final existe y

ii. El final de esa rutina no ha sido alcanzado y no lo será aunque la


rutina siga operando porque no existe.

Es preciso reconocer que este resultado, incluido propiamente entre los


resultados de limitación de la lógica moderna, posee un cierto aire paradójico. ¿Cómo
es posible que no tengamos control sobre e destino que le corresponde a una rutina
que consideramos sometida a un proceso efectivo de cálculo? ¿Cómo podemos
denominar efectiva a una tarea que deja de dar respuesta a algunas preguntas
obviamente legítimas? ¿Acaso no se opone todo esto nuestra concepción intuitiva más
fielmente asentada de lo que significa proceder de manera mecánica o efectiva? Tanto
peor para el concepto intuitivo, porque, ¿quién dijo que la ciencia tuviera que
sancionar lo que nuestras intuiciones informales tienen por cosa cierta? Para darle aún
mayor dramatismo a este resultado, podemos concluir con lo siguiente:

[12] Indeterminación del concepto de efectividad: Los siguientes requisitos


no pueden ser satisfechos consistentemente y de forma simultánea por
ninguna clase  de objetos:

i.  constituye una representación completa de la clase de tareas


efectivas.
ii. Existe un procedimiento también en esa clase capaz de
determinar si cada procedimiento finaliza o no en tiempo finito.

331
Lógica y Computabilidad

Así expresado lo que se obtiene es un genuino resultado de indeterminación


mediante el cual se muestra la imposibilidad de atribuir simultáneamente dos
propiedades a un objeto de forma consistente. A lo que parece nuestros conceptos
intuitivos elementales son capaces también de presentar estas sutiles
incompatibilidades en un grado que parece más propio de aquellos objetos a los que
atribuimos existencia independiente. Sea como fuere, hay una lectura de [12]
considerablemente más tranquilizadora para nuestro legítimo derecho a conocer y
controlar la realidad. Ésta es la que interpreta la limitación que allí se formula como la
posibilidad de tomar la clase de las tareas que pueden ser ejecutadas por medio de
máquinas de Turing como una descripción completa de la clase de las tareas que
resultan ejecutables de forma efectiva o mecánica. El precio a pagar por no contar
desde el principio con una refutación de esta hipótesis acerca de la bondad de la clase
de tareas describibles por medio de máquinas de Turing es el que se fija en el
problema de parada. En otras palabras, supone separar del concepto intuitivo de tarea
efectiva la exigencia de hallar siempre respuesta a todas las preguntas legítimas que
una rutina intenta resolver o dar respuesta.

La extrema generalidad de todas las consideraciones que acabo de hacer


permite entender bastante bien la razón por la cual Turing supo ver en todo ello un
resultado con consecuencias para el Entscheidungsproblem. El único requisito
consistía en encontrar una expresión formal del problema de parada en términos del
Lenguaje de la Lógica de Primer Orden. Si tal cosa es posible, y lo es, entonces la
Lógica de Primer Orden podría, contando sólo con sus recursos expresivos y su
aparato de prueba, hallar respuesta al problema que en cada caso analiza Up(x,y),
esto es, si la máquina Mx alcanza o no un estado de parada al tomar y como input.
Tampoco es tan extraño que esto sea así. Aunque el alcance de este curso no
aconseja especialmente entrar en el detalle, bastará con que pensemos por un
momento con qué medios es posible expresar las acciones básicas que una máquina
de Turing realiza, cómo se puede describir el contenido de la cinta sobre la que opera,
de qué forma se puede dar cuenta de la transición de un estado al siguiente, o de los
requisitos que deben darse para que una determinada configuración corresponda a
una parada estándar. Todo ello es Lógica de Primer Orden, y el que una tarea alcance

332
Diagonalización: el problema de parada

un cierto resultado no es, así visto, nada distinto de derivar un teorema a partir del
conjunto de axiomas que describen la arquitectura de cada máquina particular.

333
Lógica y Computabilidad

Orientación bibliográfica.

Hay muchas indicaciones útiles para entender la técnica de diagonalización y


sus consecuencias. Una de las más generales es [Kleene, 1952], secc.1. Para un
aplicación inmediata al problema que nos ocupa, [Boolos y Jeffrey, Boolos, 1989],
secc. 5 es, casi con seguridad, la más clara. En [Alonso, 1996] pp.91 y ss. se ofrece
también un tratamiento pormenorizado del problema. Otro lugar bastante indicado es
[Enderton, 1977] secc. 4.

La parte relativa al problema de parada puede ser seguida a partir de los


mismas referencias aportadas para entender la técnica de diagonalización. La parte
histórica y crítica sólo puede ser seguida a través de una serie de textos más o menos
accesibles.

[Kleene, 1981], [Kleene, 1987], [Kleene, 1994] son referencias de no muy


difícil lectura para las costumbres de este autor. Contiene comentarios sumamente
interesantes hechos por uno de los protagonistas incuestionables de aquel periodo. En
ese mismo sentido también puede resultar interesante [Rosser, 1984], aunque tal vez
sea demasiado específico para lo que es necesario aquí. [Davis, 1982] y [Sieg, 1997]
representan versiones contrapuestas que puede ser interesante conocer.

Los clásicos son [Turing, 1936] y [Church, 1936]. Para una interpretación de
los resultados de limitación bastante parecida a la que aquí se sigue véase el clásico
de [Rogers, 1967] en su introducción.

334

También podría gustarte