qué tipo de máquina son las computadoras?

Anuncio
Computación y normatividad: ¿qué tipo de
máquina son las computadoras?
Javier Blanco y Pío García
Resumen
En el presente trabajo cuestionamos algunos de los supuestos de la oposición dicotómica entre normatividad y
mecanicismo. Dicha dicotomía ha funcionado como justificación de posiciones que han negado la posibilidad de
un pensamiento mecánico. Sin embargo, se puede argumentar que a partir del surgimiento de la computación hay
una redefinición de los límites de lo mecánico. Esta redefinición permite cuestionar la exclusión de cualquier
versión de normatividad en el ámbito de lo mecánico.
Palabras clave: computación, normatividad, mecanicismo
Abstract
In this article we challenge some assumptions concerning the dichotomy between normativity and mechanicism.
This dichotomy has worked as a justification for perspectives denying the possibility of a mechanical thinking.
However, it may be argued that since the emergence of computation the boundaries of what can be considered
mechanical have been redefined. This change enables a challenge to the exclusion of any version of normativity
from the mechanical realm.
Keywords: computation, normativity, mechanicism
Introducción
Martin Davis, en un libro dedicado a la concepción y construcción de máquinas universales, a propósito del
diseño de la EDVAC, la computadora sucesora de la ENIAC, presenta una controversia entre los «ingenieros» y
los «lógicos» (Davis 2000, xi). Dicha controversia estaba vinculada, entre otras cosas, a lo que la máquina podía
hacer (1) y la «lógica» de las computadoras. Así, la pregunta por lo que son las computadoras ha sido
respondida desde posiciones, en algún sentido, antagónicas. Para algunos, lo que hoy llamamos computadoras es
el resultado del trabajo de diseño de máquinas de cálculo cuyo origen se puede rastrear, al menos, desde el siglo
XVII. Para otros, la computadora nació a partir del trabajo de Alan Turing, a principios del siglo XX y se
configuró como respuesta a preguntas tales como qué es un procedimiento efectivo o cuáles son los límites de un
procedimiento mecánico. Estas dos tradiciones –la ingenieril y la vinculada a los fundamentos de las
matemáticas- conllevan visiones muy diferentes de las computadoras. Sin embargo, en ambas tradiciones se
supone que la computación es un nuevo nombre para los procedimientos mecánicos. En otras palabras, para lo
que una máquina– sea física o abstracta- puede hacer. Y, en este sentido, suele haber un reconocimiento de los
límites de lo mecánico a partir de algún procedimiento o propiedad que no puede ser generado por una máquina
(2). Por ejemplo, cuando Menabrea comienza su comentario acerca del motor analítico de Babbage, divide la
tarea matemática en la que puede ser mecanizada y aquella que «requiere la intervención del intelecto» y que
«pertenece más específicamente al dominio de la comprensión» (Morrison, Morrison 1961 p. 225).
Lo que parece funcionar habitualmente como un supuesto, al menos desde la tradición ingenieril, es la
Autores: Javier Blanco es Doctor en Ciencias de la Computación por la Universidad de
Eindhoven, Holanda, y profesor asociado de la Facultad de Matemática, Astronomía y Física de la
Universidad Nacional de Córdoba.
Pío García es doctor en Filosofía por la Universidad Nacional de Córdoba, profesor adjunto de la
Facultad de Filosofía y del Centro de Estudios Avanzados de la Universidad Nacional de Córdoba
Dirección de contacto: javier.o.blanco@gmail.com
Revista Argentina de Enseñanza de la Ingeniería / Año 5 / Nº 10 / Febrero 2016
7
Filosofía de la Tecnología
continuidad entre las máquinas de calcular del siglo XVII
y las computadoras del siglo XX. Habría una diferencia
sustantiva en velocidad y capacidad de cómputo y
cualitativa en otros sentidos. Uno de los sentidos en los
cuales habría una diferencia cualitativa es el que marca la
distinción entre propiedades descriptivas y normativas.
Las computadoras, herederas de las máquinas de calcular,
no podrían traspasar el límite que marca la distancia entre
un contexto fáctico y causal y un contexto evaluativo. A
pesar de las transformaciones que involucran el
surgimiento de la computación, ésta sigue perteneciendo
al ámbito de lo mecánico y por ende está circunscrita a la
región de lo fáctico, de los hechos del mundo contingente.
Y, no obstante las diferencias en otros supuestos, aquellos
filósofos que han tomado como problema la tradición
matemática aceptan la distinción descriptivo–normativo
como coextensiva con mecánico-no mecánico. Este
segundo espacio -el de lo no mecánico- se suele completar
de diferentes maneras: estados mentales, comprensión o
evaluación son términos que expresan, al menos, una
distinción dicotómica con lo mecánico.
En el presente trabajo vamos a retomar sólo una faceta de
esta caracterización dicotómica: aquella que está
vinculada con la normatividad en el ámbito de la
computación. Sugeriremos que la oposición
descriptivo/normativo no da cuenta de las diferencias
entre mecánico y no mecánico, si consideramos a la
computación como un ejemplo de lo primero. Esta es otra
forma de argumentar que a partir del surgimiento de la
computación, al menos desde la propuesta de Turing,
habría una redefinición de los límites de lo mecánico. El
hecho de que una distinción dicotómica entre normativo y
descriptivo no dé cuenta de la computación no significa
que dicha distinción ya no tenga relevancia. Sólo que
ahora esta distinción ya no tendría una estructura que
estableciera una diferenciación cualitativa entre dos
contextos excluyentes. En este sentido sugeriremos que
hay diferentes niveles de lo normativo, algunos de los
cuales claramente aparecen en el contexto de la
computación. Aunque también presentaremos algunos
sentidos de normativo que son parte de la práctica de los
informáticos pero que difícilmente puedan ser vistos
como computacionales -en tanto no parece sencillo
argumentar en favor de su mecanización.
Siendo el contexto de análisis que proponemos tan amplio
y complejo, acotaremos nuestro trabajo de varias formas.
En primer lugar, consideraremos la discusión del artículo
clásico de Shanker acerca de la relevancia de la
normatividad a partir de la comparación entre las
posiciones de Wittgenstein y Turing. En segundo lugar,
retomaremos la perspectiva de Kripke acerca de la
relación entre computadoras y normatividad, tal como
aparece en su libro acerca de seguir una regla (Kripke
1982) (3).
Máquinas de calcular y computadoras:
¿mera distinción de grado?
Una forma de aproximarse a los límites de lo mecánico es
8
preguntarse por lo que está implicado en la evolución de
las máquinas que calcular.
Con el auge de los sistemas mecánicos en el siglo XVII se
construyeron máquinas que permitieron realizar cálculos
matemáticos elementales. Uno de los primeros ejemplos
es la máquina de calcular de Pascal del siglo XVII. La
máquina diseñada y construida por Pascal tenía como
objetivo realizar operaciones aritméticas simples -sumas
y restas- (Bowden 1953,p.6). El sistema de la pascalina
–como luego se llamó la máquina diseñada por Pascalestaba constituido por un ensamble de engranajes. Pascal
adaptó algunos de los mecanismos utilizados por los
constructores de relojes de la época para generar un diseño
confiable. La operación de la suma estaba completamente
automatizada, mientras que la resta podía ser inferida a
partir de los resultados obtenidos. Un diseño
aparentemente más completo para automatizar
operaciones aritméticas básicas fue la de Wilhelm
Schickhard. En 1624, este matemático y astrónomo le
envió a Kepler una carta con una descripción de su
máquina de calcular. Sin embargo, dicho diseño no tuvo
una gran repercusión en la historia de las computadoras
hasta bien entrado el siglo XX cuando se descubrió entre
los papeles de Kepler la carta que le había enviado
Schickhard. En los años sesenta del siglo pasado se
construyeron algunas réplicas funcionales de esta
máquina (Cfr. Goldstine 1980) (4).
Unos años después, Leibniz perfecciona el
funcionamiento de la pascalina construyendo una
máquina que podía multiplicar y dividir (Goldstine, 1980
p. 7ss). Dicho perfeccionamiento estuvo vinculado con un
tipo de engranaje que diseñó Leibniz y que luego iba a ser
muy utilizado por las máquinas de calcular del siglo XIX y
principios del XX (Bowden, 1953).
Pero, sin lugar a dudas, el antecedente más importante de
las máquinas de computar modernas fue el de Charles
Babbage. Este matemático del siglo XIX tenía como
intención generar tablas confiables para facilitar tareas tan
importantes para Inglaterra como la navegación (Cfr.
Bowden 1953). Para esto diseñó una máquina que pudiera
realizar las tareas que hasta ese entonces llevaban adelante
las computadoras humanas. El problema de los errores en
las tablas era tan relevante que la Royal Society decidió
financiar la idea de Babbage de mecanizar y automatizar el
proceso de cálculo. Si bien Babbage construyó algunos
prototipos de su máquina –una máquina diferencial (5)luego se concentró de manera exclusiva en el diseño de lo
que llamó la máquina analítica. Por esta razón, incluso en
una época tan tardía como mediados de los 50 del siglo
pasado, en una de las historias de la computación más
reconocidas, la de Bertrand Bowden (6), se dice que fue
Babbage quien enunció «los principios en los cuales todas
las modernas máquinas de computar se basan» (Bowden,
1953, ix). Esta afirmación es todavía más significativa si
se toma en cuenta que en la introducción de la obra de
Bowden, en la cual se hace una síntesis breve de la historia
de la computación, no hay mención alguna a la obra de
Alan Turing (7).
Revista Argentina de Enseñanza de la Ingeniería / Año 5 / Nº 10 / Febrero 2016
Filosofía de la Tecnología
Regresando a los aportes de Babbage, si bien él fue capaz
de construir un prototipo de su máquina diferencial, se
requería un mecanismo más complejo (8) para que
pudiese construir tablas «útiles», y Babbage nunca pudo
completarlo ya que en 1842 el gobierno le había retirado el
apoyo económico (9). De cualquier manera, en 1833 se le
había ocurrido a Babbage la idea de construir una máquina
aun más compleja pero más versátil: su máquina analítica.
Esta máquina incorporó una modificación sustancial. A
partir de las innovaciones de Joseph Marie Jacquard con
telares, se le ocurrió a Babbage incorporar las tarjetas
perforadas como un medio para, en principio, controlar a
la máquina. Además, Babbage tenía la intención de que su
máquina perforase tarjetas –con una especie de
impresora- para que luego pudieran ser utilizadas
nuevamente como datos de entrada. De esta manera, las
tarjetas perforadas funcionaban como un medio para el
ingreso de datos y el control de la máquina en un sentido
semejante al de un programa en una computadora
contemporánea. Además, el diseño de la máquina incluía
una unidad para guardar información y una unidad
aritmética (10).
En cuanto a lo que la máquina analítica podía hacer, una de
las primeras y mejores descripciones se encuentra en
resumen publicado en francés por el matemático italiano
Luigi Menabrea en 1842. Un año después, este texto es
traducido al inglés por Ada Lovelace (11). Lovelace no
sólo traduce el texto de Menabrea sino que le agrega
algunos comentarios y apreciaciones acerca de lo que se
podía hacer con la máquina de Babbage (12). En
particular, Lovelace destaca que la máquina analítica no es
meramente una complejización de la máquina analítica.
La máquina diferencial estaba construida para «la
computación de las tablas náuticas y astronómicas»,
mientras que la máquina analítica podía ser vista como «la
expresión material de cualquier función indefinida de
cualquier grado de generalidad o complejidad» (13)
(Morrison y Morrison 1961 p. 245).
Para Bowden, la velocidad de cómputo y el aumento de la
capacidad de almacenamiento son dos de las propiedades
que distinguen a las primeras máquinas de cálculo de las
computadoras del siglo XX. En este contexto se puede
entender el comentario de Menabrea que citamos en la
introducción. Lo mecánico encuentra su límite en la
comprensión y el razonamiento. Una manera
complementaria de desarrollar y, eventualmente,
fundamentar esta concepción de las computadoras es
apelando a la dicotomía entre normatividad y descripción.
Shanker y en algún sentido Kripke han identificado la
diferencia entre Wittgenstein y Turing a propósito de las
computadoras en esta dicotomía.
Normatividad y descripción como límites
de lo mecánico: Shanker, Kripke y Turing
Tal lo decíamos más arriba, la dicotomía entre normativo
y descriptivo se ha entendido a veces como dando cuenta
de la diferencia entre lo no mecánico y lo computacional.
Una de las fuentes que se suele citar para justificar esta
dicotomía es la falacia naturalista de Moore (Moore
1903). Esta falacia suele remitir al comentario de Hume en
el Tratado acerca de la eventual confusión entre el
vocabulario de lo que es con el del deber ser (Hume
1739/2005 p. 634). Esta distinción eventualmente se
convirtió en una dicotomía que ha sido utilizada como
crítica a los intentos de naturalización de lo normativo
(Ridge 2014). En el contexto que nos interesa para este
trabajo, lo mecánico se suele identificar con lo fáctico,
causal (14) o descriptivo. Y esta parece ser la forma en la
cual retoma Shanker esta discusión cuando presenta su
contraposición entre Wittgenstein y Turing (Shanker
1987). De acuerdo con Shanker, Wittgenstein entiende
que la posibilidad de hacer matemática requiere de una
reconstrucción en términos normativos, esto es que
admita corrección o que sea algo más que un proceso
causal de naturaleza descriptiva. A su vez, Shanker
sugiere que en Turing habría en realidad dos tesis: una de
carácter matemático -la que se refiere a lo que es un
procedimiento efectivo- y una tesis epistemológica -la que
se refiere a si es posible afirmar que la extensión de lo
computable es tal que las máquinas puedan pensar. A esta
segunda propuesta la denomina Shanker «tesis
mecanicista». Shanker establece un vínculo entre el
Turing de 1936 y el de 1950. Si bien el objetivo del artículo
de Shanker es contraponer las posiciones de Wittgenstein
con las de Turing, en varios párrafos se muestra que
Shanker pretende utilizar los supuestos wittgensteinianos
para argumentar en contra de algunas interpretaciones del
pensamiento mecánico. Shanker argumenta de la
siguiente manera: la única referencia explícita de
Wittgenstein a las máquinas de Turing parece ser la de los
Remarks on the Philosophy of Psychology. Aquí se habla
de las máquinas de Turing como «humanos que calculan».
Si bien el sentido de la referencia, más bien irónico, no es
del todo claro, en otros pasajes citados por Shanker de la
obra wittgensteniana se quiere diferenciar entre un
proceso meramente empírico de «contar» y un proceso
como el de calcular. En este último caso habría un aspecto
normativo que no estaría presente en el primero (Shanker
1987, 619-620). La mencionada cita wittgensteniana
sobre Turing haría referencia entonces a esta confusión
entre aspectos meramente mecánicos y descriptivos computación- y aspectos normativos, típicamente
humanos. Lo mecánico que es criticado como meramente
una descripción o un procesamiento simbólico no hace
referencia solamente a las máquinas en general sino a las
computadoras en particular.
Esta perspectiva ha sido retomada en los años 80 del siglo
pasado por Saúl Kripke en un libro dedicado al problema
de seguir una regla (Kripke, 1982). En este trabajo, Kripke
defiende que hay una paradoja cuyo origen es el parágrafo
§201 de las Investigaciones: «ningún curso de acción
puede ser determinado por una regla, porque cualquier
curso de acción puede ser ajustado a la regla».
Recordemos brevemente la forma en la cual Kripke
desarrolla esta propuesta wittgensteniana: supongamos
que debo hacer una suma 68 más 57 igual a 125 (15).
Revista Argentina de Enseñanza de la Ingeniería / Año 5 / Nº 10 / Febrero 2016
9
Filosofía de la Tecnología
Nunca antes he hecho esta suma. Como la cantidad de
sumas que he hecho en mi vida son finitas, puedo
encontrar un caso que se ajuste a mi historia personal, de
no haber hecho antes dicha suma. Al hacer la suma estoy
utilizando una palabra «suma» y un signo «+» para
denotar una función matemática sobre cualquier par de
enteros positivos. Por medio de una representación
simbólica externa y mi representación interna (mental)
puedo entender, comprender (grasp) la regla de la suma.
La regla determina mi respuesta a indefinidamente
muchas nuevas sumas, aunque yo haya computado sólo un
número de sumas finitas en el pasado. Y este parece ser el
contenido de la noción de aprender o de entender (grasp)
la regla de suma: «mis intenciones pasadas sobre la suma
determinan una única respuesta para indefinidamente
muchos casos nuevos en el futuro» (Kripke, 1982, p. 8).
Continuando con nuestro ejemplo, realizo la suma
anterior y obtengo 125. La respuesta, dice Kripke, es
correcta en un «sentido aritmético» y en un «sentido
metalingüístico». El primer sentido se refiere a que
efectivamente la función suma aplicada a los dos enteros
da como resultado 125. El sentido metalingüístico
involucra que el uso de la palabra «suma», tal como yo la
he intentado utilizar en el pasado, denota una función tal
que aplicada a 68 y a 57 da como resultado 125. Un
«escéptico bizarro» podría cuestionar el uso de la palabra
«suma», tal que si tomo en cuenta mis intenciones en el
pasado, podría denotar otra función, digamos «cuma».
Esta función «cuma» tiene un resultado que se ajusta con
lo que he obtenido en el pasado –en el ejemplo de Kripke,
todas aquellas sumas que involucran números menores a
57-. Pero esta función «cuma» es tal que si tengo un
número mayor a 57 entonces el resultado es 5. En el
pasado, en lugar de «suma» lo que puedo haber querido
significar –mis intenciones- era «cuma». Como es
evidente, los resultados de sumas anteriores no
discriminan entre las dos funciones. Y este detalle es
importante porque si esta hipótesis -«bizarra», «loca»- es
falsa debería poder citar un hecho acerca de mi uso en el
pasado que permitiera refutarlo. Porque por más bizarra
que sea esta hipótesis no es a priori imposible. Además,
por hipótesis, «nunca me he dicho a mí mismo
explícitamente que debo decir 125 en esta instancia
particular» (Kripke 1982, p.10). Esta hipótesis particular
no permite utilizar a «suma» como la función que
discrimina entre 5 y 125. Pero supongo que cuando digo
125 no he realizado un salto al vacío, sino que tengo
alguna justificación para esa respuesta. «Sigo
instrucciones que me he dado a mí mismo previamente y
que determinan de manera única que la respuesta debe ser
125 en esta circunstancia» (p. 10). Seguir haciendo lo que
siempre hice tampoco ayuda a solucionar esta situación,
porque los resultados pasados no discriminan. Podría
haber estado utilizando la regla cuma en el pasado. Cuma
podría ser lo que yo quise decir (what i meant) en el
pasado. Lo que puede verse es que la estrategia de Kripke
parece descansar en la división entre regla y
comportamiento, por un lado, y entre la función misma y
10
la forma en la cual puedo comprenderla/aprenderla
(grasp) y usarla.
El desafío escéptico, nos dice Kripke, tomaría entonces
dos formas. Por un lado está la cuestión de encontrar un
hecho que permita discriminar entre «suma» y «cuma».
Por otro lado está la cuestión de las razones que puedo
tener para sostener mi confianza de que ahora debería
haber contestado 125 en lugar de 5. Por supuesto que
ambas formas están íntimamente relacionadas: «debo
contestar 125 porque yo tengo confianza que esta
respuesta está de acuerdo con lo que yo quise decir»
(Kripke, 1982, p. 11, cursivas en el original). No hay un
cuestionamiento ni a nuestra capacidad de cómputo ni a
nuestra memoria. El problema, continúa Kripke es que la
respuesta que debo dar es claramente 125 si supongo que
«suma» es la función que yo quise usar. Y lo que busca
insistentemente Kripke es algún hecho o razón que
permita justificar esta suposición. La condición de lo que
se busca es fuerte en tanto que lo que se supone es que 125
debe ser la respuesta correcta (p. 11). De lo contrario mi
respuesta, según el escéptico, sería arbitraria. Cualquier
respuesta debe satisfacer dos requerimientos. Se debe
especificar qué hecho constituye mi significado de
«suma», como diferente de cuma. Y además se debe
mostrar cómo yo estoy justificado en decir 125 en este
caso. Kripke supone que el hecho en cuestión debe ser
acerca de mis estados mentales (p. 11). Además, «las
instrucciones» mencionadas antes, que determinan lo que
debo hacer en cada instancia, deben de alguna manera
estar «contenidas» en cualquier candidato para el hecho
de lo que quise decir (what i meant). En este sentido,
parece que estoy en problemas si busco algún hecho que
permita justificar un deber ser. Sería, de alguna forma, una
instanciación de la falacia naturalista o de la definición. Si
esta interpretación es correcta, entonces el problema
vuelve a ser, como en las secciones anteriores, el abismo
que habría entre un contexto descriptivo –las condiciones
empíricas de seguir una regla– y lo que se supone que
funciona como justificación –los aspectos normativos.
En las páginas siguientes, Kripke lleva la discusión a un
terreno muy similar al de la disputa acerca de la
justificación de la causalidad en Hume. Para hacer más
plausible la posición del escéptico Kripke supone dos
escenarios. El primero es el del presente. En este
escenario, el escéptico acuerda con nosotros que 125 es la
respuesta correcta. Pero el escéptico pone en cuestión la
vinculación entre este escenario, el presente, con un
segundo escenario en el pasado. ¿Cómo podemos estar
seguros de que «suma» y no «cuma» es lo que yo quise
decir en el pasado? El problema no es entonces ¿cómo sé
yo que 125 es el resultado de 57 más 68?, puesto que
puedo responder a esta pregunta realizando una
computación aritmética2. Sin embargo, esta concesión del
escéptico a mi uso del término «suma» en el presente tiene
como objetivo hacer plausible su propuesta. Finalmente,
cuando, como dice Kripke, se retire la alfombra del piso,
se podrá ver que lo que se cuestiona es también el uso
presente. Porque si no puedo citar ningún hecho o razón
Revista Argentina de Enseñanza de la Ingeniería / Año 5 / Nº 10 / Febrero 2016
Filosofía de la Tecnología
–conductista o en términos de estados mentales- que me
permita justificar si en el pasado he usado «cuma» en lugar
de «suma», entonces tampoco estoy justificado para mi
uso presente (p. 13). La mera seguridad psicológica, como
es evidente, no es suficiente.
Kripke explora la alternativa disposicionalista para evitar
las paradojas finitistas clásicas de la inducción. Pero,
como señala Kripke, si sumo dos números arbitrarios,
puedo no tener la disposición a dar el resultado, en tanto
dichos números pueden ser demasiado grandes para que
pueda procesarlos o aún retenerlos en mi memoria (p. 26).
Hay una variante del argumento disposicionalista que es
especialmente apropiado para nuestro trabajo. Citando un
artículo de Dummett, Kripke se pregunta qué ocurriría si
una máquina se encargase de llevar adelante -seguir- la
regla (p. 32). Se podría interpretar esta propuesta como
significando que la regla queda embebida o corporizada
en un mecanismo (p. 33). Suponiendo que soy capaz de
construir dicha máquina, lo primero que tengo que
especificar es a qué me refiero con dicho término. Puedo
querer referirme al «programa» o a la máquina «física» constituida por transistores y cables (p. 34). Si me refiero
al primer sentido de máquina -programa- aparecen las
mismas dificultades que en el caso de referirme al signo
«+». Si me refiero a máquina en el segundo sentido -los
transistores y cables- también aparecen los mismos
problemas en tanto debo especificar explícitamente las
reglas que dicha máquina debe seguir. Es más, en tanto la
respuesta de la máquina es finita, el escéptico puede
interpretar el resultado como una instancia en favor de la
función «cuma». Decir que la máquina es abstracta
tampoco soluciona el problema porque en algún momento
se debe especificar -implementar- dicha máquina
abstracta.
Entre la contraposición que supone Shanker entre
Wittgenstein y Turing y la propuesta de Kripke hay una
continuidad evidente. La discusión discurre en el contexto
de la dicotomía entre descriptivo y normativo. Sin
embargo, también es evidente que Kripke tiene otro
problema en mente. Kripke no parece estar directamente
preocupado por los errores categoriales de la falacia
naturalista (16) sino más bien por las consecuencias
escépticas y contraintuitivas de suponer un abismo entre
los hechos y los enunciados normativos. Tal como
interpretamos la posición de Kripke, el problema consiste
en encontrar algún hecho que sirva de justificación de la
relación entre un enunciado normativo y el
comportamiento resultante. Y parece que no hay ningún
hecho que pueda servir para justificar dicho paso. El
comportamiento generado tampoco sirve como
justificación en tanto pertenece, en general, al ámbito de
los hechos.
Hay dos observaciones que queremos plantear en este
artículo. La primera es que si bien parece que la distinción
entre lo normativo y lo descriptivo es adecuada y útil, no
necesariamente habría que reconstruirla en términos
dicotómicos. Esto es, en términos de distinciones
cualitativas que no admitan ninguna gradación. La
segunda observación consiste en cuestionar que se deba
entender a la computación como una instancia más de lo
fáctico, causal y descriptivo. Esta parece una concepción
que no le hace justicia a la forma en la cual se configuró la
misma noción de computación. Veamos de qué forma se le
puede dar cuerpo a esta segunda observación. Dejaremos
la primera observación para la sección final del artículo.
Las máquinas según Turing: máquinas
universales
Shanker se centra en la discusión acerca de si las máquinas
pueden pensar. Y desde este punto de vista se deberían
entender sus intentos de mostrar los límites de las
computadoras. Una manera de remarcar estos límites es
presentar a las computadoras como mecanismos fácticos y
causales. Si bien este es un aspecto ineludible de las
computadoras actuales, estas propiedades no dan cuenta
de la riqueza conceptual de estos mecanismos.
En el artículo de Turing de 1936 se presenta una
caracterización de las máquinas automáticas y de una
máquina especial denominada universal. Ambas
propuestas le dan cuerpo a la noción de computación. El
objetivo en dicho trabajo era explicitar qué significaba que
hubiese un procedimiento efectivo para tratar con
sistemas formales. El significado de lo que implica
calcular de manera efectiva se entendería a partir de
entonces como la ejecución pas o a pas o del
funcionamiento de máquinas abstractas. Este acuerdo
parece ir más allá de encontrar un formalismo para
caracterizar una noción. Así parece entenderlo Gödel
cuando dice que con Turing encontramos por primera vez
una noción «absoluta» de computación.
Habitualmente se aborda el problema del alcance de la
noción de «máquina» -y de «máquina de Turing»- para
entender la de «computación». Menos explorado es el
eventual aporte de la idea de máquina universal que
Turing presenta en el mismo artículo de 1936. Por
supuesto que ha sido ampliamente reconocida la
importancia de las máquinas universales como una nota
distintiva de la propuesta de Turing (Davis 2000), lo cual
no significa que se hayan explicitado las consecuencias de
este aporte conceptual. Este aporte parece ir más allá de
una mera sofisticación de las máquinas de Turing o de una
extensión de su campo de aplicación. Así, a partir de esta
noción se puede cuestionar el supuesto de continuidad
gradual (17) defendido por algunos historiadores de la
computación y que consignábamos en la segunda sección.
Las máquinas universales muestran algunos aspectos
interesantes de lo que las máquinas de Turing pueden
hacer. Una máquina de Turing está definida a partir de un
conjunto finito de estados, un alfabeto finito de símbolos
de entrada (se suele usar un alfabeto binario) y una función
de transición, la cual suele ser presentada como una tabla
de transición. Los datos de entrada vienen en una cinta
infinita (pero con una cantidad finita de símbolos no
nulos), sobre la cual habrá una posición diferenciada que
indicará el símbolo corriente. Cada una de las filas de la
tabla indica para cada estado y símbolo de entrada dados
Revista Argentina de Enseñanza de la Ingeniería / Año 5 / Nº 10 / Febrero 2016
11
Filosofía de la Tecnología
cómo se cambia el símbolo corriente de la cinta, si se
mueve para la izquierda o la derecha la posición corriente,
y cuál será el nuevo estado. El «computador» presentado
por Turing para realizar las computaciones prescriptas por
sus máquinas abstractas es una persona equipada con lápiz
y papel que toma una tabla de transición como
codificación de un comportamiento cuyos datos de
entrada están en la cinta, y va aplicando mecánicamente
los pasos prescriptos en esa tabla. Como decíamos, cada
paso indica posibles modificaciones a una posición de la
cinta, un posible cambio de posición y cuál es el siguiente
estado. Si se llega a un estado y un símbolo de entrada para
el cual no hay ninguna regla en la tabla, el programa
termina.
Como hemos caracterizado en otros trabajos (Blanco et al
2011) una noción originada en la misma ciencia
computacional que nos permite caracterizar de manera
general a los sistemas computacionales es la de intérprete.
Entenderemos por intérprete a un programa o mecanismo
capaz de tomar como entrada a un programa y sus datos y
realizar el proceso que ese programa prescribe para esos
datos de entrada. Una máquina de Turing cualquiera
puede ser vista como un intérprete, si consideramos a la
tabla de transición como un programa y a la cinta como los
datos. El «computador», una persona actuando
mecánicamente, será quien a partir de seguir las reglas
prescriptas en la tabla llevará adelante el proceso de
modificación de la cinta hasta un posible estado en el cual
no haya ninguna regla que se aplique. Esta idea de
efectividad en el cálculo realizado por un humano puede
extenderse a muchas otras realizaciones posibles. Lo que
es indispensable es que se tenga un sistema donde a partir
de ciertas codificaciones se puedan producir
comportamientos específicos. Una de las novedades
importantes que se producen con las máquinas de Turing
es la enorme versatilidad que proveen, es decir, la
extensión de los comportamientos codificables en sus
tablas de transición, que llevan a la llamada tesis de
Church-Turing, de que cualquier comportamiento
mecanizable puede ser simulado por una máquina de
Turing.
La máquina universal es una máquina particular (dada por
su propia tabla de transición) cuyo comportamiento
consiste en recorrer la cinta leyendo el código de una
máquina dada, y luego comportarse como dicha máquina
tomando como entrada el resto de la cinta. En este sentido,
la máquina universal puede imitar el comportamiento de
cualquier otra máquina, al menos en lo que respecta al
comportamiento de entrada/salida. Esta posibilidad
depende de que se pueda codificar una máquina de Turing
y que luego esta codificación sea parte de los «datos» de
entrada de otra máquina de Turing particular que ahora
funciona como una máquina universal. Una propiedad es
que no podemos predecir el comportamiento de cualquier
máquina de Turing (aunque podamos predecir el
comportamiento de algunas). Esto se sigue de la solución negativa- al problema de la detención. Esto es poder
predecir si una máquina de Turing cualquiera dará un
12
resultado -positivo o negativo- o no se detendrá nunca.
Esta es una manera muy fuerte de establecer que no
podemos saber a priori lo que hará una máquina (en este
caso una computadora). Dado que la máquina universal
puede imitar a cualquier máquina y que no puede
predecirse el comportamiento de algunas de dichas
máquinas (es decir, no hay manera mecánica de
determinar conociendo la máquina y los datos para esa
máquina, si va a producir un resultado o no), no puede
predecirse en particular el resultado de evaluar una
máquina universal para un conjunto de datos iniciales (los
cuales en particular pueden estar codificando alguna otra
máquina). Es de algún modo curiosa la situación:
disponemos de una máquina particular, la máquina
universal, para la cual podemos demostrar que es
impredecible, que no hay ningún método para determinar
a priori su comportamiento. Por supuesto que una manera
de saber cómo se va a comportar es llevar adelante el
proceso mecánico que ella prescribe, pero no hay ninguna
garantía de que ese proceso arroje algún resultado
observable.
A la luz de la discusión previa sobre intérpretes, puede
decirse que la máquina universal internaliza su propio
intérprete, en el sentido en que a partir de su propio
funcionamiento considerado como un intérprete
particular implementa un intérprete mediado por una
codificación explícita particular.
La noción de intérprete, como clave de análisis para la
computación, nos permite poner en primer plano varios
conceptos. Uno central es el de programabilidad. Otro
concepto, pertinente para lo que venimos discutiendo, es
el de prescripción. Un programa prescribe un
comportamiento observable. Como vemos, una de las
ideas centrales detrás de la noción de computación está
relacionada con la vinculación entre un comportamiento
observable y un programa. Dicho vínculo es normativo.
Esta idea de normatividad asociada con la computación se
puede explicitar en diversos contextos. Una condición de
posibilidad para indagar en estas formas de normatividad
es considerarla una noción que admita diferentes
instanciaciones o grados.
Aspectos normativos de la computación
Un sentido de normatividad que destaca Wittgenstein –y
gran parte de la tradición posterior- es que dicha noción
involucra la posibilidad de un comportamiento correcto o
incorrecto. El mero comportamiento mecánico, en tanto
pertenece al contexto de lo descriptivo o de lo causal no
califica como normativo en este sentido. Sin embargo,
¿hay aspectos normativos involucrados en la
computación? Es importante señalar que no queremos
defender aquí que todo comportamiento mecánico sea
normativo. La computación constituye un mecanicismo
particular y, como vimos en la sección sobre máquina
universal, en un sentido no trivial, se puede decir que
vuelve a fundarlo.
Retomemos el problema de la normatividad en este
contexto nuevo. Supongamos que uno de los sentidos más
Revista Argentina de Enseñanza de la Ingeniería / Año 5 / Nº 10 / Febrero 2016
Filosofía de la Tecnología
interesantes de normatividad está capturado por la
posibilidad de un comportamiento correcto e incorrecto.
En otras palabras, que se pueda hablar de errores en
relación con alguna norma que me diga qué es lo correcto.
En el caso de la computación podrían distinguirse
diversos niveles discriminables por el tipo de error
involucrado. En primer lugar, se podría hablar de
corrección en el nivel de la implementación
computacional física. Aquí aparece un sentido de mal
funcionamiento, poco interesante, por fallas físicas. Este
sentido es poco atractivo para nosotros porque no todo
error o falla está asociado con la violación de una norma,
al menos en el nivel de análisis que estamos planteando: el
de la computación (18).
Habría un segundo sentido de corrección vinculado con la
implementación y que depende de la arquitectura. Los
conocidos errores de redondeo estarían en este nivel. Las
especificaciones acerca del tipo de arquitectura que puede
soportar un programa funcionarían como los estándares a
partir de los cuales el comportamiento resultante es el
esperado.
Un tercer sentido estaría representado al nivel del
programa y su relación con el comportamiento. Este nivel
está, a su vez, relacionado con la noción de corrección
estipulada por un intérprete. El intérprete dice cómo
debería vincularse el programa con su comportamiento.
Se podría decir que esta especificación es concreta y que
tiene un sentido normativo más fuerte en el nivel
siguiente: el de la especificación. Este es un sentido de
corrección fuerte y por tanto constituye un sentido de
normatividad importante. Pero no es el sentido de
normatividad más importante en computación.
Evidentemente un programa puede generar de modo
mecánico un comportamiento. Dicha generación es
posible por el intérprete que vincula la entrada –programa
y datos- con la salida –el comportamiento resultante. Pero
este programa puede no corresponderse con lo estipulado
por las especificaciones. Si no he realizado la prueba
lógica correspondiente no sé si efectivamente el programa
hace lo que se supone- por las especificaciones- que
debería hacer. Las especificaciones de los programas
pueden estar escritas en diversos lenguajes formales que
modelen aspectos de los comportamientos de los
programas.
Un caso particularmente importante, tanto desde un punto
de vista conceptual como histórico, es la ya descripta
máquina universal. La noción misma de máquina
universal da una especificación precisa del
comportamiento de entrada/salida que debe tener, a saber,
que para una entrada de la codificación de una máquina M
y de un dato D, la salida debe ser la misma que si se ejecuta
el proceso de la máquina M misma con los datos D como
entrada. Es decir, que la especificación de la máquina
universal estará dada por una particular lectura del mismo
lenguaje formal de las máquinas de Turing (mediada por
una codificación particular explícita de las tablas de
transición de las máquinas).
A partir de esta caracterización de la máquina universal
como codificando explícitamente especificaciones que
pueden ser vistas como prescripciones -normas-, se puede
establecer un contraste con otras máquinas de Turing
cualesquiera. En la sección anterior señalábamos que el
análisis original de Turing presentaba a un sujeto «computador»- realizando una tarea simple que podía
descomponerse en pasos mecanizables. Este análisis
permitió el diseño -en papel y lápiz- de las máquinas de
Turing. Tanto el análisis presentado como las máquinas
resultantes pueden ser vistos como meros mecanismos
que sólo presuponen aspectos descriptivos. Cuando una
máquina de Turing particular toma como dato de entrada
la codificación de otra máquina, el comportamiento
resultante deberá ser como el de la segunda máquina. Es
en este sentido que decíamos que las especificaciones
están codificadas de manera explícita en la máquina
universal. Como indicamos más arriba, esto plantea un
sentido más fuerte de normatividad, sin dejar por ello de
ser un mecanismo particular. Esta manera de comprender
máquinas particulares a partir de prescripciones
normativas establecidas al interior de su marco de
existencia no es privativo de las máquinas de Turing, sino
que puede reconstruirse en cualquier sistema formal o
tecnológico que dé cuenta de nociones de cómputo. Las
nociones de intérprete, compilador, evaluador parcial o en
general cualquier programa que toman otros programas
como datos estructuran los conceptos y las prácticas de la
ciencia de la computación y sus propias definiciones se
establecen en términos normativos, como propiedades
que determinados programas deben cumplir.
Esta propuesta no responde necesariamente al problema
de normatividad asociado con un comportamiento
inteligente o con el pensamiento humano. Pero muestra,
en el contexto de la computación, que la idea de
normatividad puede plantearse en diferentes niveles. Y
que probablemente uno de los sentidos más robustos de
normatividad sea el caso de las especificaciones. Este
rótulo de robusto está vinculado con la posibilidad de
corregir un programa para que se ajuste a lo que debería
ser –las especificaciones-. Una tarea a desarrollar es
mostrar, en términos filosóficos, cuáles serían las
relaciones entre las especificaciones, el comportamiento,
el programa y las pruebas lógicas que pueden vincularlos.
Consideraciones finales
En el presente trabajo hemos intentado defender que la
oposición entre descriptivo y normativo no es coextensiva
con la oposición entre computacional y no computacional.
Esta asociación entre estas dicotomías parece apoyarse en
la identificación indebida entre lo computacional y lo
factual, causal y descriptivo. Para cuestionar esta
identificación hemos argumentado en favor de los
aspectos normativos en computación.
Sin embargo, se podría argumentar que aspectos como el
de la especificación de los programas pertenecen a la
actividad de la ciencia computacional pero no a la
implementación de sistemas computacionales. De
acuerdo con esta objeción, cuando se toman en cuenta
Revista Argentina de Enseñanza de la Ingeniería / Año 5 / Nº 10 / Febrero 2016
13
Filosofía de la Tecnología
contextos como el de la especificación o el de la
construcción de programas se estaría ampliando indebidamente- lo que tradicionalmente se ha entendido
por computación. Lo que Wittgenstein o Kripke tenían en
mente eran los sistemas de computación mecánicos, en el
sentido de dispositivos implementados.
Habría al menos dos formas de contestar a esta objeción.
La primera es general y está vinculada con lo que ya
hemos dicho acerca de la importancia conceptual de la
noción de máquina universal. La segunda es una respuesta
más específica y se podría plantear en dos partes. La
primera es rescatar el contexto de construcción de
programas como un ámbito genuino para comprender lo
que es la computación. Aquí podríamos recordar la
posición de Canguilhem: cuando queremos comprender
las máquinas es ineludible apelar al contexto de
construcción de las mismas; o la de Dijkstra, para quien la
ciencia de la computación reside y siempre residirá en el
interjuego entre la manipulación humana de símbolos,
llamada programación, y la manipulación mecánica de
símbolos, llamada computación. La segunda parte de
nuestra respuesta depende de lo que se debería considerar
para comprender las prácticas de los informáticos. La
especificación de los programas no es sólo parte de las
buenas prácticas en programación -permitiendo, por
ejemplo, generar heurísticas para la corrección de erroressino que también permite comprender en un sentido
sustantivo a los programas.
Pensar a la máquina universal como un caso
paradigmático de normatividad al interior del formalismo
mismo tiene la relevancia histórica de haber sido la piedra
basal sobre la que se desarrolló la idea de computadora. En
este sentido, puede verse cómo una forma de
normatividad intrínseca articula desde el inicio las
ciencias de la computación.
Sin embargo, habría una objeción de mayor peso aun:
incluir a la especificación de programas como parte de una
concepción mecánica de la computación significaría
poder mecanizar todo el proceso de especificación. Y, tal
como lo reconocen los informáticos, este proceso de
especificación conlleva un tipo de actividad creativa. De
acuerdo con esta objeción se estaría confundiendo
computación con la actividad de los informáticos, que
puede que no sea mecánica. En este punto adquiere mayor
importancia nuestra propuesta original: disolver la
dicotomía entre normativo y descriptivo sustituyéndola
por una concepción gradual. No estamos suponiendo que
toda la actividad que realizan los informáticos haya sido
efectivamente mecanizada. Pero, tal como lo explicitamos
en la sección anterior, hay actividades de la informática
que suponen un valor de corrección -y en este sentido de
normatividad- que va más allá de algunos de los sentidos
de normatividad que hemos identificado en el proceso más
abstracto de especificación. Si abordamos la tarea de la
informática en toda su complejidad y utilizamos
herramientas conceptuales que permitan dar cuenta de
todos sus matices, entonces se pueden cuestionar algunos
supuestos que estaban apoyados en una perspectiva
dicotómica.
Notas
(1) Davis cita un comentario de uno de los padres de la construcción de computadoras: Howard Aiken. Para este ingeniero, sería una coincidencia “asombrosa”
que la lógica detrás de las máquinas que resuelven ecuaciones diferenciales y de las máquinas utilizadas para la contabilidad fuese la misma.
(2)También se podría discutir si habría comportamientos que las máquinas físicas son capaces de generar que excedieran los límites de lo que puede hacer un
mecanismo en el sentido de procedimiento efectivo. En lo que sigue no exploraremos esta posibilidad.
(3) Este último texto ha generado una abundante literatura filosófica. En tanto nuestro objetivo está restringido al ámbito de la computación, sólo consideramos
algunos comentarios a la obra de Kripke.
(4) Según relata Goldstine, al parecer un prototipo de la máquina de Schickhard quedó deteriorado por un incendio y su diseñador nunca retomó la construcción
de la misma. El prof. Bruno y Edwin Epple construyeron algunos prototipos en los sesenta (Cfr. Kisterman 2001).
(5) En realidad, Babbage construyó partes de la misma. Recién luego de su muerte, su hijo Henry Babbage completó la construcción de algunas de sus
máquinas. Sin embargo, ya en 1822 Babbage tenía un prototipo funcional de su máquina diferencial (Bowden, 1953 p. 9).
(6) Bowden participó activamente en la construcción de las primeras computadoras en la Inglaterra de la posguerra. Trabajando para la empresa Ferranti, se
convirtió en el primer vendedor de computadoras. Su libro de 1953 inicialmente tenía como objetivo ser una carta de presentación de estas nuevas máquinas,
pero el proyecto creció hasta convertirse en una síntesis de “quién es quién” en el naciente mundo de las computadoras (Tweedale 1990) (Cfr. Lee; Lee 1995).
(7) Curiosamente, en uno de los capítulos de dicha obra sí se destaca el papel precursor de Turing. Sin embargo, hay otro indicio del lugar periférico de Turing en
este libro y es que sólo aparece como colaborador de un capítulo secundario acerca de las computadoras y los juegos.
(8) Más abajo veremos que, de acuerdo con Ada Lovelace, se podría relativizar esta afirmación.
(9) A pesar de estas dificultades, una máquina diferencial de Babbage fue utilizada para calcular las “tablas de vida” usadas en computar costos de los seguros
por parte del gobierno inglés (Bowden 1953 p. 10). Esas tablas sirvieron para sustituir las que eran utilizadas hasta ese entonces en Inglaterra y Alemania, a
partir de una publicación de Babbage de 1824.
(10) Para una descripción más extensa se puede consultar el artículo de Aldana D'Andrea sobre este tema (D'Andrea 2015).
(11) La traducción y comentarios de Ada Lovelace se puede encontrar en Morrison y Morrison 1961.
(12) Uno de sus comentarios se convierte en una de las objeciones más citadas del texto de Turing de 1950 que discute la posibilidad de que las máquinas puedan
pensar (Turing 1950).
(13) Estas son partes de la nota A que, de acuerdo con Lovelace, es una respuesta –negativa- al supuesto de Menabrea de que la máquina analítica es una
continuación directa de la máquina diferencial.
(14) Esta referencia habitual a lo causal es, al menos, curiosa cuando se señala a Hume como fuente. Sólo en un sentido muy restringido lo causal se identifica
con lo fáctico en Hume.
(15) En Blanco y García 2014 hemos discutido la propuesta de Kripke. Aquí retomaremos la primera parte de lo que proponíamos en dicho trabajo y
agregaremos las apreciaciones de Kripke acerca de la computación.
(16) Aunque la forma en la cual Kripke argumenta supone una solución a la falacia naturalista: no hay posibilidad de confundir el lenguaje de los hechos con el
lenguaje de lo que debe ser.
(17) El supuesto de la continuidad gradual estaba vinculado con la historia de las máquinas físicas. La discontinuidad cualitativa es diferente y está relacionada
con la distinción entre normativo y descriptivo.
(18) Es importante remarcar en este caso que en algunos contextos este tipo de falla sí puede tener un carácter normativo. Si hay algún recurso teórico a partir del
cual plantear lo que debería ser un comportamiento, entonces está la posibilidad de definir lo correcto e incorrecto.
14
Revista Argentina de Enseñanza de la Ingeniería / Año 5 / Nº 10 / Febrero 2016
Filosofía de la Tecnología
Bibliografía
BOWDEN, B. V. (1953). Faster than thought: a symposium on digital computing machines. London: Pitman.
BLANCO, J.; CHERINI, R.; DILLER, M.; GARCÍA, P. (2011) A Behavioral Characterization of Computational Systems, Proceedings of European
Conference on Computer Science. Munich: Verlag Dr. Hut.
BLANCO, J.; GARCÍA, P. (2014). Eran tres, dos austríacos y un inglés. Wittgenstein, Gödel, Turing. Actas del V Coloquio Internacional de Filosofía de la
Técnica. Buenos Aires: Universidad Abierta Interamericana.
D'ANDREA, A. ¿Impotencias de las máquinas? el motor analítico de Babbage y los límites de lo mecanizable. Revista Argentina de Enseñanza de la Ingeniería,
Año 4 Nº 10.
DAVIS, M. (2000) The universal computer. The road from Leibniz to Turing, W. W. Norton and Company.
DESCARTES, R.: (2003) Discurso del método; estudio preliminar, traducción y notas de Bello Reguera, E. Madrid: Ed. Tecnos.
GOLDSTINE, H. H. (1980). The computer from Pascal to von Neumann. Princeton University Press.
KRIPKE, S. (1982) Wittgenstein on Rules and Private Language. Harvard University Press.
LEE, J. A., & Lee, J. A. (1995). International biographical dictionary of computer pioneers. Taylor & Francis.
MORRISON, P. (Ed.). (1961). Charles Babbage and his calculating engines: Selected writings by Charles Babbage and others (p. xxiii). Dover.
MOORE, G.E., (1903). Principia Ethica, New York: Cambridge University Press.
RIDGE, M. "Moral Non-Naturalism", The Stanford Encyclopedia of Philosophy (Fall 2014 Edition), Edward N. Zalta (ed.),
URL http://plato.stanford.edu/archives/fall2014/entries/moral-non-naturalism/SHANKER, (1987) Wittgenstein versus Turing on the Nature of Church's
Thesis, Notre Dame Journal of Formal Logic, vol. 28, no. 4.
TURING, A. M. (1936). "On Computable Numbers, with an Application to the Entscheidungs problem". Proceedings of the London Mathematical Society. 2
(1937) 42: 230–265.
TURING, A. M. (1950). Computing machinery and intelligence. Mind, 59, 433-460.
TWEEDALE, G. Bertram Vivian Bowden, Ann. Hist. Comp., Vol. 12, No. 2, 1990, pp. 138-140.
WEBB, J (1980). Mechanism, Mentalism and Metamathematics. Dordrech, Holland: D. Reidel Publishing Company.
Revista Argentina de Enseñanza de la Ingeniería / Año 5 / Nº 10 / Febrero 2016
15
Descargar