miércoles, 7 de octubre de 2015

Memoria y Materialización

Gran parte de mi día a día es ocupado por un trabajo totalmente aburrido en una empresa de software. Bueno; "empresa de software" que en realidad se parece más a una consultora. Si bien se trata de una labor que no requiere mucha imaginación o creatividad, y con pocos objetivos de progreso a largo plazo (hacia un estado de mayor felicidad), de vez en cuando uno aprende técnicas de programación que hacen a un tipo curioso irse por las ramas... ¡de la metafísica! Increíble o incluso hilarante que parezca para muchos desarrolladores de software, esos momentos de mi vida existen, y yo los valoro mucho.

Fenómenos y realidad


Esta es otra entrada que tiene que ver con los fenómenos. Los fenómenos son las manifestaciones, todo lo que se puede experimentar. O por qué no, las experiencias en sí, o las apariencias. Desde un punto de vista científico, un fenómeno es algo que se puede medir.

Supongo que la mayoría de nosotros tenemos una inclinación por intuir que existen cosas reales y otras irreales. O quizá, sentimos a algunas cosas "más reales" que otras (bueno; todo aquello que es sensible debe ser real, ¿o no? Lo recíproco puede no ser verdadero). Pero, ¿qué hace que ciertas cosas se sientan más reales que otras? En este momento, en el que estoy escribiendo este artículo, siento al teclado muy real; es porque puedo tocarlo. Lo mismo con la pantalla, la cual tengo frente a mis ojos. Es la una de la mañana de un miércoles, es obviamente de noche. Acabo de darle play a una lista de reproducción de Bossa Nova (adoro esta música); la música es tan real como cualquier elemento de la habitación. Acabo de fumar un cigarrillo.

¿Qué tal el sueño que tuve anoche? Hacer un viaje en el tiempo a un año 2067 retrofuturista decadente y luego escapar de vuelta al pasado ascendiendo por la entrada de una alcantarilla... bueno, no me parece tan real en este momento (¿será porque no lo recuerdo en detalle?), pero sí lo era anoche, mientras lo soñaba, mientras lo vivía.

Cachés


Hace unos días, cuando me hice la pregunta, recordé que ya me la había hecho hace unos años atrás. Pero ayudó haber estado trabajando con memorias caché unas horas antes; esa conjunción fue inspiradora. Pero, antes de seguir con la explicación, debo dar una mínima idea de lo que es una caché. Sin entrar en detalles, una caché es un tipo de memoria de acceso rápido y de tamaño reducido, que almacena datos temporales (volátiles). Se utiliza en diversos tipos de dispositivos o software que requieran leer con facilidad datos que, en un principio, no son sencillos de construir u obtener. Su pequeño tamaño es compensado con velocidad de acceso. El uso de una memoria caché no suele ser imprescindible para el acceso a la información, sino más bien una técnica de utilidad.

Una analogía podría llegar a dilucidarlo (creo que la estoy tomando prestada de cierta bibliografía de sistemas operativos): en mi facultad tenemos una biblioteca, y adyacente a ella su sala de lectura. Uno entra a la biblioteca, se dirige hacia la computadora, busca los libros A, B y C en el índice para luego ir hacia lugares específicos del almacén de libros y recogerlos. Este proceso toma algo de tiempo; quién haya vivido una vida de estudiante podría saberlo. Una vez que tiene los libros A, B y C que necesita, se dirige hacia la sala de lectura con ellos. Se sienta en alguno de los escritorios y coloca los libros sobre la mesa. Toma el cuaderno que lleva en su mochila y comienza a escribir sus notas. Al principio, podría llegar a hacerlo sin consultar ninguno de los tres libros. Pero, seguramente, llegará un momento en que deba hacer una consulta al libro A. Por suerte, uno no necesita volver al almacén en busca del libro A (lo que sería una tarea tediosa) ya que lo tiene al alcance de la mano. Lo mismo ocurre con los libros B y C: seguramente los necesitará pronto, y por eso los tiene sobre la mesa.

En definitiva, este escritorio es un buen ejemplo de caché. Notar que es pequeño y no puede albergar muchos libros, pero sí permite tenerlos a mano. También funciona como depósito temporal ya que una vez que el estudiante lo abandona, debe retornar los libros a la biblioteca (si es educado, claro).

Una rutina para calcular factoriales


Suponga que quiero escribir un programa de ordenador que le permita a un usuario calcular factoriales. El factorial de un número natural n es el producto de todos los números naturales entre 1 y n, ambos incluidos. Se denota con n!. Por ejemplo, 4! = 1×2×3×4 = 24.

Ahora, suponga que el usuario desea usar mi programa para calcular los factoriales 5! y 10!, en ese orden. Yo, como programador, sería un poco ingenuo si escribiera un programa que primero calcule 1×2×3×4×5, y luego 1×2×3×4×5×6×7×8×9×10. ¿Por qué? Pues porque no hay necesidad de multiplicar los números desde 1 hasta 5 la segunda vez, ya que la máquina los multiplica la primera vez para obtener 5!. En vez de repetir los cálculos, podría indicar a la computadora que guarde el resultado 5! en su memoria, que es 120, para luego computar 120×6×7×8×9×10. Esto reduce la cantidad de operaciones a 5 productos en vez de 9.

Esta técnica se denomina "programación dinámica". En algunas ocasiones se vuelve práctica la combinación de esta técnica y el uso de memorias caché para almacenar resultados de cálculos complejos. 

Materialización de factoriales 


Hemos de notar en el ejemplo anterior que si bien guardar 5! en la caché no es necesario para calcular 10!, sí es muy práctico. Lo mismo podría hacerse con cualquier n! para reducir cálculos de factoriales más grandes. Pero para ello es necesario un espacio donde materializar esos valores. Ese espacio es la memoria.

Dicho de otra manera, el resultado 120 almacenado en la memoria es de alguna forma más concreto que la receta (implícita y abstracta) que se utiliza para definir 5!, la cual es 1×2×3×4×5. En definitiva: podemos pensar que los factoriales se manifiestan (o materializan) cuando se guardan en la memoria, porque luego de ser memorizados pasan a formar parte de un espacio muy palpable, que es la memoria misma.

Materializar Mandelbrot


Puede ser una buena idea retornar (¡una vez más!) a los fractales, pero esta vez para analizar programas capaces de calcularlos... o medirlos... o como queramos pensarlo, ya que después de todo es más o menos lo mismo. Los conjuntos que más me interesan son el de Mandelbrot, el de Julia, o similares, en cuyos gráficos abundan formas similares a las que se encuentran en la naturaleza, como árboles, ríos, plantas, insectos, etc.


Las implementaciones de representación gráfica de estos conjuntos (por lo menos las más populares) pueden llegar a requerir una cantidad importante de cálculos, incluso al momento de colorear un solo píxel. Estos algoritmos toman algunos datos de entrada, como coordenadas, y a partir de ellos dibujan alguna sección en particular. En general, los programas de computadora que funcionan de esta manera disponen de herramientas para hacer zoom hacia dentro y hacia afuera, o moverse en diferentes direcciones. Esto permite al usuario explorar diferentes partes del fractal a diversas escalas.

Pensemos un poco en una posible implementación. Un programador podría utilizar una caché para almacenar los colores de los últimos píxeles visitados por el usuario. La finalidad práctica sería que los colores de los píxeles recientes no fueran recalculados cada vez que el usuario decidiera hacer un pequeño zoom o movimiento. Pero, además, si pensamos en el cacheo como materialización, entonces podemos concluir que memorizar el color de un píxel es lo mismo que hacerlo manifiesto. Observamos un fractal cuando lo calculamos, y lo hacemos "tangible" cuando lo memorizamos.

Los Fenómenos como Materialización de las Ideas


Permitámonos soñar que observar la naturaleza o el mundo físico (o el universo en un estado de vigilia) no es diferente a realizar un cálculo complejo. No me refiero justamente a que el cerebro requiera de cálculos complejos para interpretar la realidad; podemos dar eso por sentado. En vez de eso, sugiero "soñar", ya que pido que pensemos que todo lo que medimos en el mundo físico es el resultado de hacer cálculos y almacenar datos en nuestra memoria; que medir el mundo y memorizarlo es materializarlo.

¿Qué tal si no hubiera mucha "estructura" allá afuera? ¿Qué tal si el mundo fuera simplemente una receta de ideas ejecutada por los sujetos? ¿Algún concepto nos impide ver al mundo de esa forma? ¿Sería esa receta pequeña, extensa, o ininteligible? Podríamos tener una receta parecida a la órbita de un fractal. Podría incluso ser comprensible pero caótica también. Los sujetos serían meras implementaciones de materialización de ideas en el espacio y el tiempo.


De hecho, Immanuel Kant afirma en su Crítica de la Razón pura que "todo lo intuido en el espacio y el tiempo, y con ello todos los objetos de nuestra experiencia posible, no es más que fenómenos, esto es, meras representaciones, que del modo en que se representan, como sustancia extensa o series de alteraciones, no tienen existencia propia e independiente aparte de nuestro pensamiento". Además, para Kant existe un nivel de conocimiento, la sensibilidad, que se encarga de ordenar en el espacio y el tiempo (los cuales son parte de este mismo nivel de sensibilidad) las impresiones que tiene el sujeto. Entonces, ¿qué tal pensar en el espacio-tiempo como la caché de nuestra realidad lúcida, o como gran parte de ella? Nuestra realidad lúcida es construida a partir de una fórmula para luego ser plasmada en el espacio-tiempo.

En el artículo Del porqué de la existencia comparo la galaxia de Andrómeda con el conjunto de Mandelbrot, y remarco la pobre excusa de recurrir a una variable espacial para determinar la existencia de las cosas. Por alguna razón decidimos creer que un objeto es "más real" que otro. Quizá ese juicio tenga que ver más con nuestra cultura (¿occidental?) que con nuestra naturaleza humana. O quizá tenga que ver con una mente habituada a la vigilia. Sea como sea, valdrá la pena dejar de programar un poco y tomarse unas horas del trabajo para analizarlo.

Especulaciones y Nada Más


Me gusta especular, y como me siento libre de hacerlo, voy a hacerlo. Si el espacio-tiempo es caché, entonces puede que sea pequeño en comparación al mundo potencialmente mensurable. Quizá nunca haya existido y nunca existirá un unicornio en nuestra verdad lúcida. Sin embargo, los fenómenos están al alcance de la mano. Son volátiles, a diferencia de la receta, la cual es inmutable y trascendental. Las cosas que vemos están ahí porque es conveniente tenerlas ahí, pero no fundamental. Materializar es una ardua tarea. La sensibilidad es (muy) útil, pero prescindible.



Más info:http://www.wordreference.com/es/en/frames.aspx?es=materializar
https://es.wikipedia.org/wiki/Fen%C3%B3meno
https://es.wikipedia.org/wiki/Cach%C3%A9_%28inform%C3%A1tica%29
https://es.wikipedia.org/wiki/Programaci%C3%B3n_din%C3%A1mica
https://es.wikipedia.org/wiki/Factorial
https://es.wikipedia.org/wiki/Conjunto_de_Mandelbrot
https://es.wikipedia.org/wiki/Conjunto_de_Julia
http://www-reynal.ensea.fr/docs/iq/PrinciplesOfQuantumComputation1.pdf (Introduction to Classical Computation, deterministic chaos)
https://es.wikipedia.org/wiki/Idealismo
https://es.wikipedia.org/wiki/Idealismo_trascendental
https://es.wikipedia.org/wiki/Cr%C3%ADtica_de_la_raz%C3%B3n_pura
https://es.wikipedia.org/wiki/Immanuel_Kant
https://en.wikipedia.org/wiki/Orbit_(dynamics)
https://es.wikipedia.org/wiki/Galaxia_de_Andr%C3%B3meda

lunes, 5 de enero de 2015

Del porqué de la existencia (de Mandelbrot)

Lo primero que diré es que cuando me refiera a "Mandelbrot" no voy a estar haciendo referencia a Benoit, sino a su conjunto. Lo segundo es que "Andrómeda" será la galaxia, no la diosa.

¿Por qué diríamos que Mandelbrot no existe y que Andrómeda sí? Quizás, el simple hecho de que no podamos apuntar con el dedo para ubicar ese conjunto en algún punto del espacio nos hace concluir que no existe. Podemos usar esta técnica con la galaxia de Andrómeda, aún considerando que la mayoría de nosotros no tiene telescopio para poder observarla en detalle. De hecho, muchos dirían que Benoit tampoco existe; y pensarían que sería mejor decir que existió, ya que murió en 2010.

¿No es una excusa bastante pobre la de utilizar exclusivamente una variable espacial para juzgar la existencia de las cosas? Bueno, otros dirían que es válido afirmar que Mandelbrot existe, pero que "no tiene existencia física". O sea, no se puede tocar, oler, observar, y otras cualidades empíricas (cualidades de los sentidos). Sin embargo, tampoco podemos tocar ni oler a Andrómeda, y tampoco pueden observarla en detalle aquellos que no tienen al alcance un telescopio. Pero tranquilamente podría decir que sí es posible observar a Mandelbrot si tengo acceso a una computadora (si está conectada a la internet, mejor).

Yo creo que no hay mucha diferencia entre un telescopio y una computadora. Más allá de lo que decía Edsger Dijkstra acerca de la computación y la astronomía *, podemos analizar el asunto desde dos perspectivas:

* "La ciencia de la computación no trata sobre las computadoras más de lo que la astronomía trata sobre los telescopios".
  1. Reduccionista: telescopios y computadoras son instrumentos de medición. Toman datos de entrada y los transforman en datos de salida para que el operador los pueda interpretar. Hay diversos mundos por descubrir, y aparatos de toda clase para estudiarlos. Desde este punto de vista, una computadora recibe un algoritmo de generación del fractal de Mandelbrot y muestra un dibujo en la pantalla. En definitiva, Mandelbrot existe, está en "alguna parte" de la realidad (no necesariamente en algún lugar), y puede ser medido por un ordenador. Después de todo, supongo que consideramos que Benoit no inventó al conjunto, sino que lo descubrió... ¿o me equivoco?
  2. Holista: todo es creado por los instrumentos de medición, por lo que es obvio que llamarlos "instrumentos de medición" no es una buena idea. En particular, telescopios y computadoras generan por su cuenta toda la información que observa el operador. De esta manera, un telescopio puede generar la imagen de Andrómeda para luego proyectarla por el ocular o en una pantalla. Sólo depende de que los parámetros de entrada para generar la galaxia sean correctos. Estos parámetros son, entre otros, la posición espacial del instrumento y el ángulo del cañón. Claro que si quisiéramos ser aún "más holistas", no notaríamos la diferencia entre un telescopio y su operador... ¿dónde termina uno y empieza el otro?

Al momento de escribir este artículo, siento ganas de pensar que el fractal sí existe; que es un inmenso mundo que, paradójicamente, cabe en un puñado de líneas de código. Parece que me estuviera inclinando por la versión reduccionista. Y sin embargo podría imaginar que Mandelbrot existe porque, ¡yo soy Mandelbrot!. xD


Info relacionada:
http://en.wikipedia.org/wiki/Benoit_Mandelbrot
http://en.wikipedia.org/wiki/Mandelbrot_set
http://en.wikipedia.org/wiki/Andromeda_Galaxy
http://en.wikipedia.org/wiki/Empiricism
http://en.wikipedia.org/wiki/Reductionism
http://en.wikipedia.org/wiki/Holism
http://es.wikiquote.org/wiki/Edsger_Dijkstra

jueves, 7 de marzo de 2013

Ser cuadrado es divertido.

Cómo construir un cubo.

Me refiero a la figura. De hecho, en general, al politopo que generaliza al segmento, al cuadrado, al cubo, al hipercubo, y a todos los n-cubos, con n natural (me faltó nombrar al punto, de dimensión 0?). En general, todos conocemos a los primeros tres... pero, qué es un hipercubo? Cómo definimos a un cubo de más de tres dimensiones? Si los consideramos meros grafos (vértices unidos por aristas, sin considerar la posición de cada vértice), es muy sencillo; veamos que hay un patrón para construirlos:

* Un segmento es la unión de dos puntos por una arista.

* Para tener un cuadrado, debemos tomar dos segmentos A y B. Suponiendo que a1 y a2 son los vértices de A, y b1 y b2 son los vértices de B, al unir por aristas a1 con b1 y a2 con b2 tenemos un cuadrado.

* Para construir un cubo, debemos tener dos cuadrados A y B. Sean a1,a2,a3,a4 los vértices de A y b1,b2,b3,b4 los de B, al unir por aristas a1 con b1, a2 con b2, a3 con b3, a4 con b4 tenemos un cubo.


El patrón es notable en las dimensiones más bajas; podemos generalizarlo y aplicarlo a dimensiones más altas:

* Para construir un (n+1)-cubo ("cubo de dimensión n+1"), tomamos dos n-cubos A y B (dos cubos de una dimensión inmediatamente más baja). Sean a1,a2,...,a2^n los vértices de A y b1,b2,...,b2^n los vértices de B, al unir por aristas a1 con b1, a2 con b2, ... , a2^n con b2^n tenemos un (n+1)-cubo. Para quienes no conozcan la notación, "2^n" significa "dos elevado a la n-ésima potencia"; 2 multiplicado n veces. Simplificado: tomo dos cubos A y B de una dimensión inmediatamente más baja, y ligo con aristas cada vértice de A con exactamente un vértice de B.

Lo que para algunos puede no ser muy claro es que este método asume que un n-cubo tiene 2^n vértices. Pero esta cuestión es muy sencilla de demostrar:

* Claramente, un segmento tiene 2 = 2^1 vértices.
* Un cuadrado está formado por dos segmentos unidos por sus vértices. Cada segmento tiene dos vértices, por lo que tenemos 2 + 2 = 4 = 2^2 vértices.
* Un cuadrado está formado por dos cuadrados unidos por sus vértices. Cada cuadrado tiene cuatro vértices, por lo que tenemos 4 + 4 = 8 = 2^3 vértices.
* Etcétera, para dimensiones más altas.

De hecho, un punto consta de un solo vértice y su dimensión es 0; 1 = 2^0.

La lógica y los cubos.

Alguno diría "qué nexo puede llegar a haber entre un politopo, que es un elemento geométrico, y la lógica?". Otros afirmarían "pfff, por suerte todo se relaciona con la lógica, los cubos no son la excepción". Si bien no estoy seguro de la segunda afirmación (:P) sé que la primera es incorrecta. Inclusive, la correlación puede llegar a ser tan obvia (para nuestras mentes) que pocas veces la notamos.

Una proposición es una declaración que puede ser verdadera o falsa, pero no ambas al mismo tiempo (pues claro). Si es verdadera, se dice que su valor de verdad es verdadero; de lo contrario su valor de verdad es falso. Por ejemplo, "el sol es una estrella" es una proposición cuyo valor de verdad es verdadero, "dos y dos son cinco" es otra cuyo valor es falso. La declaración "qué bonito día!" NO es una proposición. Además, diremos que dos proposiciones son "independientes" si el valor de verdad de una no afecta al de la otra. Por ejemplo, podemos asumir que "yo tengo un gato" y "yo tengo un perro" son independientes, ya que podría no tener ninguno, podría tener uno de ellos, o incluso ambos (poco tiene que ver la propia rivalidad entre perros y gatos). Sin embargo, "hoy es lunes" y "mañana es martes" NO son independientes ya que si la primera es verdadera, la segunda también lo es.

Vamos a imaginar que tenemos una clase de mundo (algo así como una "plantilla") formada por una cantidad n de proposiciones independientes. Cada proposición será p1, p2, p3, ..., pn. Llamaremos a n el grado de la clase. Un mundo será una instancia de esta clase, donde cada proposición toma algún valor de verdad. Para ejemplificar, supongamos que nuestra clase está formada por n = 2 proposiciones, que son las siguientes:

p1: "Javier tiene un gato".
p2: "Javier tiene un perro".

Entonces, pregunto: cuántos mundos de esta clase podría haber? Respuesta: cuatro mundos.

Mundo número 1: p1 y p2 son falsos; o sea, Javier no tiene ni gato ni perro.
Mundo número 2: p1 es verdadero y p2 es falso; o sea, Javier tiene gato pero no tiene perro.
Mundo número 3: p1 es falso pero p2 es verdadero; Javier no tiene gato pero sí perro.
Mundo número 4: p1 y p2 son verdaderos; Javier tiene ambos.

En definitiva, es muy fácil enumerar los mundos para cada clase. Simplemente probamos todas las posibilidades, asignando verdadero o falso a las proposiciones. Entonces, en general, si tenemos una clase de mundo de grado n (con n proposiciones), cuántas instancias habrá? La respuesta es 2^n y el razonamiento es sencillo:

* Si n = 1, nuestra clase sólo está formada por una proposición; sea p1. Por ende, hay 2 = 2^1 mundos: en uno p1 es falso, en el otro p1 es verdadero.

* Si n = 2, la clase está hecha de dos proposiciones; sean p1 y p2. Notemos que si tomamos p1 podemos crear otra clase de grado 1; sea A. De la misma forma, podemos tomar p2 y crear otra clase de grado 1; sea B. Entonces, cualquier mundo de la clase está conformado por dos mundos, uno de A y otro de B. Cuántos mundos hay para A? Ya conocemos la respuesta por el punto anterior: 2. Y para B? Respuesta: también 2. Entonces cuántos mundos tenemos? 2*2 = 2^2 = 4.

* Si n = 3, la clase está hecha de tres proposiciones; sean p1,p2,p3. Con un razonamiento análogo al anterior, un mundo de nuestra clase está formado por tres mundos de clases de grado 1; sean A,B,C. Cuántos mundos hay para A? Ya conocemos la respuesta por el primer punto: 2. Lo mismo para B y C: 2 mundos. Entonces cuántos mundos tenemos? 2*2*2 = 2^3 = 8.

* Etcétera para grados más altos.

Se ve la relación entre clases y cubos? O entre mundos y vértices de un cubo? Notemos que dadas una clase de grado n y un n-cubo, podemos asignar un mundo a cada vértice del cubo... y viceversa: podemos asignar un vértice a cada mundo! Pero uno podría considerar esta correspondencia bastante trivial... más adelante mostraré que no es así.

Los conjuntos, la lógica y los cubos.


Pensemos en números naturales (son 0,1,2,3,4,5,... en adelante). De hecho, pensemos en conjuntos finitos de número naturales... son colecciones de números naturales, como por ejemplo {1,2,3}, o {1,3,5}, o {10}, o el conjunto vacío {} (es un conjunto con cero números naturales). Me gustan estos conjuntos ya que me gustan estos números... parecen ser "más reales que algunos reales"... esto me recuerda a una cita del matemático y lógico alemán Leopold Kronecker: "Dios sólo hizo a los naturales, todo lo demás es obra del hombre". En fin... Una "parte" de un conjunto X es un subconjunto de X. Por ejemplo, si X = {1,2,3}, entonces {2,3} es una parte de X, pero {3,5} NO es ya que 5 no está en la lista 1,2,3. Además, el conjunto vacío {} es parte de cualquier conjunto, y un conjunto siempre es parte de sí mismo. Representaremos a la colección de partes de un conjunto S como P(S). Pregunta: cuántas partes tiene X? O sea, cuántos elementos tiene P({1,2,3})? Contemos:

* Primero el conjunto vacío, 1.
* Contemos las partes de cardinal 1, {1}, {2}, {3}, son 3.
* Contemos las partes de cardinal 2, {1,2}, {1,3}, {2,3}, son 3.
* Contemos las partes de cardinal 3, {1,2, 3}, sólo 1.

En total: 1 + 3 + 3 + 1 = 2^3 = 8. Se observa la idea del planteo?

En general, supongamos que tenemos un conjunto finito S = {x1, x2, x3, ..., xn} cuyo cardinal es n (tiene n elementos). Cuántas partes tiene S? Respuesta: 2^n. La prueba es análoga a las anteriores, que demuestran que la cantidad de vértices de un cubo o la cantidad de mundos de una clase es una potencia de dos... se mantiene la naturaleza de recursividad, o de inducción...

Como existe una cantidad finita de partes, estas también pueden ser enumeradas. Vamos a usar una numeración bastante estándar, un algoritmo sencillo... para asignar un número a una parte T de S, empezamos asignando el valor 0 una variable r. Luego, recorremos todos los elementos de S, que son x1, ..., xn. Si i es tal que xi pertenece a T, le sumamos 2^i a r. Hago esto para todos los elementos xi de S. Finalmente, r será el número asignado a T. Por ejemplo, supongamos que S = {0,1,2} y T = {1,2}:

* Empezamos haciendo r = 0.
* x0 = 0 pertenece a S; pero está en T? NO, dejo r como está.
* x1 = 1 pertenece a S; pero está en T? SÍ, sumo 2^1 = 2 a r. r = 2.
* x2 = 2 pertenece a S; pero está en T? SÍ, sumo 2^2 = 4 a r. r = 6.

Resultado final: {2,3} tiene asignado el número r = 6. En general para este ejemplo tenemos 2^3 = 8 partes que se enumeran de la siguiente forma:

{} -> 0
{0} -> 1
{1} -> 2
{0, 1} -> 3
{2} -> 4
{0, 2} -> 5
{1, 2} -> 6
{0, 1, 2} -> 7

Se ve la relación entre conjuntos finitos de naturales, los cubos y las clases? Todo esto significa que dados un conjunto finito de cardinal n y un n-cubo, podemos asociar una parte a cada vértice del cubo... y podemos asociar un vértice a cada parte... y una parte a cada mundo... y un mundo a cada parte! Y aún más: podemos enumerar cada vértice, mundo o parte! En definitiva, existe la siguiente correlación:

Cubo........... Clase......... Conjunto finito
Vértice........ Mundo...... Parte (con su número natural asignado)
Dimensión... Grado....... Cardinal

Pero uno podría seguir creyendo que esta correspondencia es algo banal.

Vértices en el espacio.

No voy a profundizar en lo que es un espacio vectorial; sólo explicaré de forma sencilla qué es un vector: puede ser imaginado como un punto o vértice dentro de un espacio. En muchas ocasiones, quienes utilizamos el álgebra, nos enfrentamos a la tarea de trabajar con espacios de dimensión finita. Estos son, por ejemplo, los espacios unidimensionales, bidimensionales, tridimensionales (como lo es nuestro espacio físico), o tetradimensionales... en general, n-dimensionales, siendo n un número natural. En este artículo sólo mencionaremos espacios de dimensión finita.

Estos espacios son conjuntos de vectores (o vértices, o puntos); cada vector  ocupa un lugar distinto del espacio. Por lo tanto, si elegimos un punto de referencia, podemos concluir que cada vector tiene una posición. Esa posición puede ser representada mediante una lista (o tupla) de coordenadas, que son valores (en general numéricos) que codifican la posición del vector a lo largo de algún eje o dimensión.

Por ejemplo, supongamos que tenemos un espacio tridimensional V, formado por todos los vectores cuyas coordenadas son triplas de números enteros. Además, llamémosle "x" a la primera dimensión de V, "y" a la segunda, "z" a la tercera. Las siguientes son coordenadas de algunos vértices de V:

(1, 2, 3),
en este caso, la posición de nuestro punto a lo largo del eje x es 1, a lo largo del eje y es 2, para el eje z es 3.

(-1, 2, 3)
en este otro, la posición de nuestro punto a lo largo del eje x es -1, a lo largo del eje y es 2, para el eje z es 3. Notemos que este vector NO es el mismo que el anterior... su posición NO es la misma: que la coordenada x sea positiva o negativa significa que el punto está de un lado o del otro con respecto al plano formado por los ejes y, z.

(2, -3, 5)
este último caso representa al vector x=2, y=-3, z=5.

Notemos que, como NO puede haber dos puntos distintos en la misma posición, las coordenadas de un vector lo representan unívocamente. Por lo tanto, diremos que un vector es igual a su tupla de coordenadas. Por ejemplo, el vector (1,2,3) es el vector cuya posición es (1,2,3).

Para cerrar este apartado, observemos que un espacio de dimensión finita puede ser infinito. Por ejemplo, el espacio tridimensional conformado por "todas" las triplas de enteros es de dimensión finita (3); sin embargo hay una cantidad infinita de triplas de enteros. En los siguientes apartados, sólo nos concentraremos en espacios "totalmente" finitos.

Códigos lineales binarios.

Un código lineal binario (o para nosotros, simplemente "código") es un espacio vectorial finito (por ende, también de dimensión finita), constituido por tuplas de valores en {0, 1}. A cada vector se le llama palabra. Representaremos con Z(2,n) al código lineal binario de n dimensiones formado por todas las tuplas de valores {0, 1} y de longitud n.

Por ejemplo, las palabras (1,0,1), (0,0,1), (0,1,0), (0,0,0) pertenecen a Z(2,3), ya que son vectores de tres coordenadas {0, 1}. De hecho:

Z(2,3) = {(0,0,0), (0,0,1), (0,1,0), (0,1,1), (1,0,0), (1,0,1), (1,1,0), (1,1,1)}.

Pudimos enumerar las palabras de Z(2,3) ya que el espacio tiene una cantidad determinada de elementos. En general, cuántas palabras hay en un código Z(2,n)? Respuesta: como siempre, 2^n. La prueba es muy sencilla: ya que Z(2,n) tiene TODAS las palabras de longitud n, una palabra w de Z(2,n) podría contener 0 ó 1 en cualquiera de sus coordenadas. O sea, podemos asignarle a w el 0 en la primera posición, o tal vez el 1; el 0 en la segunda, o quizá el 1; etc. En definitiva: podemos asignar uno de dos valores a cada coordenada. Eso nos da una cantidad 2*2*2*...*2 [n veces] = 2^n de combinaciones... por ende, 2^n palabras.

Cuando hablamos de conjuntos finitos en un apartado anterior, aprendimos que el conjunto de las partes de {0, 1, 2} (P({0,1,2})) tiene 2^3 = 8 elementos. Existirá una correlación entre P({0,1,2}) y Z(2,3)? Claro que sí: podemos asignar exactamente una palabra de Z(2,3) a cada parte de P({0,1,2}), de la siguiente manera:

sea w = (w0, w1, w2) una palabra de Z(2,3). Elegimos una parte X de P({0,1,2}) tal que X contenga 0 si y sólo si w0 = 1, que contenga 1 siempre y cuando w1 = 1 y que tenga a 2 si y sólo si w2 = 1. A esa parte X le asignamos w. Para ilustrar, damos las asignaciones de cada parte:

{} -> (0, 0, 0)
{0} -> (1, 0, 0)
{1} -> (0, 1, 0)
{2} -> (0, 0, 1)
{0, 1} -> (1, 1, 0)
{0, 2} -> (1, 0, 1)
{1, 2} -> (0, 1, 1)
{1, 2, 3} -> (1, 1, 1)

Pero, como cada parte tiene un número natural asignado, podemos asociar un número natural con cada palabra!:

  {} <-> (0, 0, 0) <-> 0
{0} <-> (1, 0, 0) <-> 1
{1} <-> (0, 1, 0) <-> 2
{2} <-> (0, 0, 1) <-> 4
{0, 1} <-> (1, 1, 0) <-> 3
{0, 2} <-> (1, 0, 1) <-> 5
{1, 2} <-> (0, 1, 1) <-> 6
{1, 2, 3} <-> (1, 1, 1) <-> 7

De hecho, para quienes conocen de la materia, las palabras y su número asociado son representaciones del mismo valor, sólo que una en binario (base 2) y la otra en decimal (base 10), respectivamente.

Estas cualidades no sólo se cumplen para n = 3, sino que para cualquier n natural! Por ende, tenemos la siguiente correlación:

Cubo........... Clase......... Conjunto finito......... Código
Vértice........ Mundo...... Parte......................... Palabra
Dimensión... Grado....... Cardinal................... Dimensión (del código)

Finalizando este artículo...

En definitiva, la tabla anterior resume íntimos paralelismos entre estructuras aparentemente distintas. Quizá en diversos ambientes sea conveniente considerar que cubos, clases, conjuntos finitos y códigos son "la misma cosa".

Por otro lado, ya que este artículo se me ha hecho algo extenso, dejaré los temas de distancia de Hamming, coloreo de grafos y ciclos de Hamilton para el futuro. Hay mucho más por descubrir detrás de la inocente traza de un discreto cubo.

Más info:
http://es.wikipedia.org/wiki/Politopo
http://es.wikipedia.org/wiki/Hipercubo
http://es.wikipedia.org/wiki/Grafo
http://es.wikipedia.org/wiki/Proposici%C3%B3n
http://es.wikipedia.org/wiki/N%C3%BAmero_natural
http://es.wikipedia.org/wiki/Leopold_Kronecker
http://es.wikipedia.org/wiki/Conjunto_enumerable
http://es.wikipedia.org/wiki/Recursividad
http://es.wikipedia.org/wiki/Inducci%C3%B3n_matem%C3%A1tica
http://es.wikipedia.org/wiki/Algoritmo
http://es.wikipedia.org/wiki/Espacio_vectorial
http://es.wikipedia.org/wiki/V%C3%A9rtice_%28geometr%C3%ADa%29
http://en.wikipedia.org/wiki/Linear_code
http://es.wikipedia.org/wiki/Base_%28aritm%C3%A9tica%29

lunes, 15 de octubre de 2012

Q^c Indecidible

- no title specified
Hace unos años tuve la oportunidad de dar clases de apoyo para ingreso universitario en ingeniería en sistemas. Mi único alumno me consultó por una duda acerca de un ejercicio introductorio de aritmética. La consigna presentaba un conjunto de números reales; el objetivo era asignar cada número a su “conjunto correspondiente”: naturales, enteros, racionales, irracionales, reales o complejos. Claro que la consigna tenía ciertos defectos evidentes: por ejemplo, el número 2 no sólo es natural, sino que también es entero, racional y real. Por lo tanto, no hay “conjunto correspondiente” para el 2. Sin embargo, uno podía asumir que el ejercicio pedía asignar cada valor al conjunto más “pequeño” al que perteneciera. En el caso del 2, sería el conjunto de los naturales.

Además, tenía otro defecto que en ese momento no pude “destapar”. Se presentaba un número con una infinita cantidad de cifras decimales... claro que no todas estaban escritas ya que eso es imposible (¡ja!), pero sí unas 8 ó 9 seguidas de puntos suspensivos a la derecha. No recuerdo el valor, pero supongamos que era “1.23581321...”; le llamaremos x. Mi alumno estaba ansioso por mi respuesta y posterior explicación de por qué x es racional o irracional. Debo aceptar que me mantuvo pensando por un tiempo bastante largo... a simple vista, x NO parece racional ya que estos números (si no tienen una cantidad finita de decimales) suelen mostrar un patrón repetitivo en su parte decimal (periódicos puros); x parece no tenerlo. Sin embargo, es imposible asegurar que x no lo tenga: quizá el período de repetición sea de más de 8 cifras. Podría tener un período de 10 cifras; por ejemplo x =  1.2358132199 2358132199 23... Así, el número sería racional. O podría ser que x sea periódico mixto: por ejemplo x = 1.2358132199777777777... Sencillamente, entre 1.2358132199 y 1.2358132200 hay una infinidad de números reales, algunos racionales y otros no ¿Cómo podría yo saber el tipo de x sin poder acceder a las siguientes cifras decimales? ¿Cómo podría alguien saberlo?

Finalmente, luego de un razonamiento incorrecto, ¡di a mi alumno una respuesta errónea! Al día siguiente le llamé por teléfono para rectificar. De hecho, le dije que en realidad no conocía un método que resuelva el problema general: dado un número real arbitrario, decidir si es racional o irracional. Por unos días estuve imaginando la posibilidad de que el problema sea indecidible: esto significa que no existe un algoritmo que logre resolverlo, dado cualquier real... quizá sí para casos particulares, como raíces de números naturales por ejemplo, pero no para todos los casos. Años después y varias materias universitarias más tarde, en la actualidad, tengo una respuesta al asunto. Veamos...

1. Enumerando pruebas.

¿Qué es una prueba, o demostración de una sentencia w? Sin ahondar en el concepto, se trata de una sucesión de sentencias que parten de un conjunto de premisas (axiomas, postulados o teoremas... en definitiva: sentencias consideradas ciertas o anteriormente probadas verdaderas) y concluyen en w. Es un método que asegura la veracidad de w: o sea, si hay una prueba para w, entonces w “es verdadera” (o w representa una verdad). Esta propiedad se llama “corrección” (en lógica matemática). Sabemos que cada sentencia debe estar escrita en un lenguaje formal; por lo tanto, cada sentencia es una cadena (o conjunto ordenado, o sucesión) finita de símbolos pertenecientes a un alfabeto. Es una clase particular de lo que los lógicos llaman “palabra”. Por ejemplo, la cadena “a+b=c” es una sentencia formada por símbolos “a”, “b”, “c”, “+” y “=”. Una sentencia no debe necesariamente representar una verdad; por ejemplo, la cadena “2+2=5” es una sentencia aún cuando la interpretación natural que le demos a los símbolos “+” y “=” sugiera una mentira.

Para simplificar el razonamiento de la cuestión, vamos a dejar de preocuparnos por la formalidad del lenguaje en que están escritas nuestras sentencias. Aún cuando el español está muy lejos de cualquier formalidad matemática o lógica, la utilización de lenguajes formales requeriría de una introducción demasiado tediosa y probablemente insustancial (bueno, ¡quizá exagero! Pero dejemos ese asunto para próximos artículos). Suponga que tenemos un alfabeto Σ bien grande formado por TOOOODOS los símbolos humanos que se hayan usado alguna vez en la historia... desde jeroglíficos o caracteres rúnicos, hasta caracteres latinos, signos matemáticos o lógicos... incluso aquellos que suelen no ser considerados caracteres pero aún así símbolos: cruces, estrellas, flechas, formas geométricas y otras pictografías... estados eléctricos, codones genéticos, estados de activación neuronal, etc etc etc. Bueno, sin exagerar... pero en definitiva, si bien son muchos, podríamos enumerarlos (con mucha paciencia... no lo vamos a hacer ahora). Esto significa que podríamos asignar un número natural único a cada carácter, lo que hace a Σ un conjunto enumerable (o contable).

Ahora, consideremos la siguiente pregunta fundamental: sea Σ * el conjunto de todas las sentencias formadas por una cantidad finita de caracteres de Σ ... Σ * = {“2+2=4”, “2+2=5”, “2>1”, “1>2”, “perro=canino”, “gato=felino”, “mañana es viernes”,  “ayer fue domingo”, “yo soy Mickey Mouse”, etc...}... entonces , ¿es Σ * enumerable? Un buen estudiante de computación (digamos) sabe que sí... hay varias formas de enumeración.

  1. 1)Por ejemplo, si consideramos que Σ tiene una cantidad finita M de símbolos, que además w = w 1 ... w n ∈ Σ * , y que f ( v ) ∈ ℕ es un número que asignamos únicamente al símbolo v ∈ Σ , entonces w puede codificarse en el valor F ( w ) = f ( w 1 ) + f ( w 2 ) ( M + 1 ) + f ( w 3 ) ( M + 1 ) 2 + ... + f ( w n ) ( M + 1 ) n − 1 ∈ ℕ . Como f(v) > 0,  el valor también codifica el tamaño de la sentencia en cuestión: el grado de F(w) es n-1 ya que f ( v ) ≠ 0 . 

  2. 2)La numeración de Gödel es otro método que nos permite codificar una palabra en un número natural. 

Ahora supongamos que P es el conjunto de todas las pruebas formadas por sentencias de Σ * . Por ejemplo, la siguiente es una prueba que está en P (recuerde que decidimos olvidar la formalidad):

Sentencia 1 (premisa): “Todos los humanos son mortales”.
Sentencia 2 (premisa): “Sócrates es humano” (o fue humano mejor dicho).
Sentencia 3 (conclusión, por reglas de particularización y modus ponens entre 1 y 2): “Sócrates es mortal”.

¿Es P enumerable? Con un argumento similar a alguno de los que usamos para observar que Σ * lo es, es claro que P es enumerable. O sea que concluimos que podemos asignar un número natural para cada prueba de P, lo que significa que hay a lo sumo tantas pruebas como números naturales.

2. Descontando irracionales.

Otra pregunta a responder es: ¿es Qc (irracionales) enumerable? Cualquiera sabe que ℝ = ℚ ∪ ℚ c … ¡o eso creo! Además, cualquier matemático sabe que R (reales) NO es enumerable: lo ha demostrado Cantor en 1981. Un buen “computólogo” sabe que Q es enumerable ya que está formado por elementos que son pares de enteros de la forma p/q (podemos utilizar la numeración de Gödel nuevamente considerando algunos pequeños detalles, o la prueba del mismo Georg Cantor).

Ahora, si suponemos que Qc es enumerable tenemos que ℚ ∪ ℚ c también lo es ya que podemos contar sus elementos de la siguiente forma:
1: primer elemento de Q,
2: primer elemento de Qc,
3: segundo elemento de Q,
4: segundo elemento de Qc,
5: tercer elemento de Q,
etc.
Pero ℝ = ℚ ∪ ℚ c , por lo que llegamos a un absurdo ya que sabemos que R NO es enumerable. Por lo tanto, debe ser que Qc tampoco es enumerable.

Por otro lado, veamos que hay POR LO MENOS tantos irracionales como naturales. Notemos que toda raíz cuadrada de un número primo es irracional (podemos probarlo utilizando el teorema fundamental de la aritmética) y que el conjunto { p : p ∈ ℕ , p primo } = { 2, 3, 5, ... } ⊆ ℚ c tiene tantos elementos como números naturales (ya que es, valga la redundancia, enumerable). Esto es, podemos considerar la siguiente asignación (a la izquierda de la flecha los irracionales mencionados, y a la derecha todo número natural):

2 → 0, 3 → 1, 5 → 2, 7 → 3, etc ...

Por lo tanto, el cardinal de Qc (que es un número “transfinito”) es mayor o igual al de N (también transfinito).

3. Numerales que no encajan.

En el punto 1 vimos que P es enumerable, en el punto 2 que Qc  no lo es. Asimismo, descubrimos la cardinalidad de cada conjunto. Además, veamos que NO puede ser que #P = #Qc ya que en ese caso Qc sería contable. Esto nos lleva a pensar que Qc  es “más grande” que P; o sea que #P < #Qc.

Volviendo a las sentencias, piense en el conjunto S = { "x es irracional" ∈ Σ * : x ∈ ℝ , "x es irracional" tiene una prueba en P } . O sea, el conjunto formado por todas las sentencias que representan el hecho de que un x real es irracional. Notemos que como S ⊆ Σ * , S es contable, por lo que #S = #P = #N (S es infinito). ¿Por qué utilizo la palabra “representan”? Porque una sentencia verdadera NO es lo mismo que una verdad (o un hecho); la primera es de carácter sintáctico mientras que la segunda es de naturaleza semántica.

Para diferenciar mejor entre una sentencia verdadera y una verdad, piense en el conjunto definido como T = { "x es irracional" como hecho : x ∈ ℝ } . O sea, T como el conjunto de verdades o hechos que tienen que ver con que x es irracional, para cualquier x real. Sencillamente, T es el conjunto de verdades de la forma “x es irracional”. Obviamente #T = #Qc ya que hay tantas verdades de la forma “x es irracional” como números irracionales. Observemos que T NO está conformado por “palabras”, pero S sí lo está.

Finalmente, ya no queda salida e inevitablemente caemos en la cruda realidad!:
#S = #P < #Qc = #T, lo que significa que, excepto para algunos x en particular, existen verdades de la forma “x es irracional” que NO pueden demostrarse. ¿Pero por qué no? Porque como #P < #T, ¡no hay una cantidad suficiente de pruebas en P para verdades en T!

4. Conclusión.

No siempre es posible decidir si un número real es irracional, incluso cuando de verdad lo sea. Por lo tanto, dado un irracional con esas características, tampoco es posible probar que es racional ya que tal cosa no es verdadera. En definitiva, el problema es indecidible. Eso hace que no exista método alguno, ya sea con un algoritmo, con un programa de computadora o un procedimiento formal que funcione en todos los casos (para todo x real). Es que ningún sistema conocido parece ser lo suficientemente expresivo como para trabajar con todo Q: ¡los irracionales escapan al alcance de cualquier “sistema enumerable”! Por ejemplo, los ordenadores son máquinas finitas que sólo pueden hacer cálculos de valores almacenados en registros finitos o memoria finita.
Una pregunta a contestar en próximos artículos es: ¿qué números reales NO padecen de estas trabas? Otra eterna pregunta es: ¿un cerebro humano sufre de las mismas limitaciones que un ordenador?... muchos creemos que sí: todos los humanos tenemos una cantidad finita de neuronas y conexiones sinápticas; es muy probable que el conjunto de estados capaces de ser generados por un cerebro también sea finito, aún cuando inimaginablemente grande. Para mi es una clara evidencia de las limitaciones de la abstracción humana.

Más info:

lunes, 14 de noviembre de 2011

Ser Humano

"Ser humano" y "ser algún humano" parecen predicados similares, pero haré notar las grandes diferencias. Por empezar, en la primera frase, la palabra "humano" es un adjetivo, pero en la segunda es un sustantivo. Por qué? Porque en la primera ocurrencia de "humano" subyace un conjunto de características (humanas) y en la última una colección de seres vivos.

Claramente, si bien se escribe siempre igual, la palabra tiene dos definiciones bien distintas. A la primera, de "ser humano", "tener características humanas", "ser de tipo humano", la llamaremos "tipo humano"; a la segunda "grupo humano". Supongamos que yo quiero saber si Javier es de tipo humano ( :D )... suponiendo que sabemos de antemano qué es SER un humano, ya que conocemos las propiedades que hacen a uno; sólo bastaría con ver que Javier cumple con todas las condiciones para demostrar la sentencia... si encuentro que Javier NO cumple con alguna de ellas, el predicado se valúa en falso. Por otro lado, la pregunta "es Javier algún humano?" (del grupo) hace referencia a otro tipo de análisis. Para saber si tal cosa es cierta, debería ejecutarse un experimento: suponiendo que yo puedo analizar a toda la raza y a cada uno de sus integrantes, bastaría con encontrar a Javier entre la población para demostrar la sentencia... si no puedo encontrar a Javier, entonces el predicado para este caso es falso.

Qué ocurre en el párrafo anterior?
1)
Como tipo: para el primer análisis, uno "arranca" suponiendo que el juicio es VERDADERO hasta que se pruebe lo contrario. Sin embargo, si la cantidad de características a chequear es muy grande, probar la sentencia se vuelve una tarea impráctica (hasta quizá imposible) aunque la idea sea claramente falsable.
Como grupo: en el segundo análisis, uno arranca asumiendo que el juicio es FALSO, hasta que se encuentre a Javier. Como el número de personas en el mundo (hoy en 2011) es de aproximadamente 7 mil millones de individuos, la refutación se vuelve impráctica (ya que hay que analizar a miles de millones para mantener el juicio en falso). Claro que hay grupos con infinitos elementos (imaginar infinitas personas), por lo que en esos casos una refutación es imposible; sin embargo bastaría con un solo Javier para mostrar la veracidad de la sentencia.

2)
Como tipo: la primera definición es análoga a un teoría del humano. Así, un modelo es un humano si cumple con todos los axiomas (atributos) de la teoría. Se trata de constructos, de abstracciones, de razonamientos e inferencias...
Como grupo: la segunda tiene que ver con la realidad, con los hechos, con lo empírico: aquí a la verdad hay que encontrarla en vez de deducirla.

3)
Como tipo: uno conoce A PRIORI lo que es "ser humano" (conocemos las cualidades que lo definen, más o menos), pero NO ocurre lo mismo con Javier: Javier sólo puede ser conocido a posteriori; o sea, luego de observar todas sus propiedades.
Como grupo: aquí ocurre lo contrario. Sabemos quién es Javier, conocemos sus atributos a priori, lo que nos permite buscar entre todos los miembros del grupo "Humano": si alguno de ellos tiene exactamente los mismos rasgos que Javier, entonces debe tratarse de él (asumimos que Javier es una entidad; es único). Sin embargo, sólo podemos conocer al grupo humano A POSTERIORI una vez que conocemos a todos sus integrantes.

4)
Como tipo: ya que no conocemos a priori a Javier, debemos hacer una observación completa de la persona para probar que se trata de un ser humano. O sea, la finalidad es saber si Javier es humano o no.
Como grupo: ya sabemos quién es Javier porque lo observamos anteriormente o tenemos conciencia de sus características de alguna otra forma. Ahora sólo basta con encontrarlo entre todas las personas: el objetivo es hallar a Javier entre la multitud... se trata de saber si existe una persona con ciertos rasgos.

5)
Como tipo: se trata de un conjunto de propiedades, pero las propiedades también son tipos. Por lo tanto, un tipo es una colección de tipos, preferentemente más "sencillos"... luego explicaré a lo que me refiero con "sencillo".
Como grupo: se trata de un conjunto de objetos de cualquier tipo (valga la redundancia). Un grupo mismo puede ser visto como un objeto también.

Y qué tiene de asombroso todo esto? Que ambos, los tipos y los grupos, son conjuntos. Ambos, de alguna manera, parecen complementarse. Y en el lenguaje tradicional de la lógica que vemos los que estudiamos ciencia o ingeniería, "x es algún humano" o "x es humano" puede escribirse como "Humano(x)", donde x es un término que representa a un objeto y Humano una fórmula (predicado o relación unaria)... también puede escribirse "x ∈
Humano". Aunque quizá la primera notación sea más adecuada para los tipos, y la segunda para los grupos.

Conjuntos normales y singulares:

En 1901, el filósofo y matemático británico Bertrand Russell hizo una distinción entre dos clases de conjuntos, a los que llamó "normales" y "singulares". Un conjunto es normal si NO pertenece a sí mismo; o sea, no es elemento de sí mismo. Un conjunto es singular si no es normal (o sea, las nociones de "normal" y "singular" son lógicamente contrarias). Por ejemplo, el conjunto T = {"perro", "gato", 1, 2, 3} es normal, pero S = {"perro", "gato", S} es singular. Estas definiciones le permitieron al filósofo demostrar que hay una contradicción en la teoría original de conjuntos, formulada por Georg Cantor y Gottlob Frege... se trata de la "paradoja de Russell", y la muestro a continuación:



Sean:

  • N la colección de todos los conjuntos normales; 
  • S la colección de todos los conjuntos singulares.
Qué tal si nos preguntamos "es N normal?":
  • Supongamos que sí. En este caso, como N es la colección de todos los normales, N debe ser un elemento de N... pero esto es absurdo ya que eso haría que N fuera singular.
  • Debe ser entonces que N es singular. Entonces, N es elemento de S. Como N y S son complementarios, N NO pertenece a N. Absurdo, ya que esto haría que N fuera normal.
No quedan dudas que se trata de una inconsistencia en la teoría tradicional de conjuntos. Cómo se puede solucionar?


Ahora que tipos y grupos son distintos...
Una solución es limitarse a aquellos tipos y grupos que podemos definir (no es posible con todos; ver "definable set" en las referencias). Qué procesos podemos utilizar para definir unos y otros? Una forma segura de evitar paradojas es la siguiente:
  • Los tipos pueden ser definidos por "comprensión". Notemos que los atributos también son tipos; por lo tanto, cada tipo puede ser una lista de tipos más "simples"... estos deben estar definidos con anterioridad, para evitar crear "tipos singulares" y ciclos (y por ende, evitando paradojas de Russell). Entonces, sea X el tipo formado por X1, X2 y X3, con X1, X2 y X3 definidos antes que X; para chequear que x es X debería ocurrir que x es X1, que x es X2 y que x es X3. Por ejemplo, el tipo "Humano" podría estar formado por "Mamífero", "Bípedo", "Depredador", "Autoconciente", etc...
  • Los grupos pueden ser definidos por "extensión". Un grupo es un conjunto de elementos. Por ejemplo, el grupo "Humano" será el conjunto formado por "Juan X", "María Y", "Fernanda R", "Bruno O", "Javier G", etc. Hay que tener cuidado de no crear "grupos singulares" y circularidades al estilo Russell ya que sabemos que pueden traer problemas.

Finalmente, comento algunas cosas...
Al principio, antes de hacer este detallado examen ( :P ), pensé que la diferencia entre las dos nociones tenía que ver con la distinción entre "juicio analítico" y "juicio sintético" (Kant, "Crítica de la Razón Pura")... consideré a la sentencia "Javier es Humano" como una especie de juicio analítico, y a "Javier es algún Humano" como un juicio sintético. Sin embargo, podemos notar que "Javier es Humano" no es analítico ya que las palabras "Javier" y "Humano" no determinan por sí solas todas las características de la persona y de los humanos, respectivamente... no son atómicas. "Javier" es sólo una etiqueta para un conjunto más amplio de información; lo mismo pasa con "Humano". Por lo tanto, la sentencia "Javier es Humano" es SINTÉTICA A PRIORI... luego me di cuenta que el primer juicio es a priori, y el segundo a posteriori, y es esa la naturaleza de la diferencia entre ambos.


Además, en la primera versión de este artículo sostuve que el problema de la paradoja de Russell radicaba en que la teoría original de conjuntos no hace distinción entre los tipos y los grupos. Sin embargo, hoy sé que estaba equivocado: luego consideré que mi propuesta (solución) era rebuscada, poco práctica y hasta quizá incorrecta, así que la descarté en esta nueva publicación. Para hacer notar la gran brecha entre lo teórico y lo empírico, me dediqué a encontrar nuevas diferencias entre ambos mundos: a priori (tipos) y a posteriori (grupos).

El tema da para mucho análisis, así que no se trata del último artículo... pronto veremos que hay una amplia relación entre la brecha "a priori" y "a posteriori", y la disparidad entre lo "computable" y lo "incomputable"... pasando por los bucles extraños de Hofstadter (Gödel, Escher, Bach) y las autorreferencias...

Más datos:

martes, 18 de octubre de 2011

Real o imaginario? Los inapreciables.

Por definición, el término "fenómeno" se aplica a los aspectos de las cosas que se pueden experimentar o medir, por lo que usarlo en referencia a objetos intangibles no es la mejor decisión (recordando el artículo anterior)... mejor sería hablar de "sucesos", "eventos" o "acontecimientos". Supondré que tales eventos reales no observables de hecho son muy reales, y los llamaré "inapreciables"... se trata sólo de un nombre; buscando alguno, el primero que se me ocurrió fue "inconstatable", pero resultó difícil de escribir o pronunciar :S. También me gusta "imperceptible"...... Kant tenía su propia palabra para describir objetos no fenoménicos (ver referencias, "noúmeno"), sin embargo se trata de una definición con la que no creo beneficiarme.

En fin, haré un breve repaso de las ideas que me hicieron un día reafirmar la posibilidad de los inapreciables... mientras iba de camino al supermercado chino, jeje. Mi intención aquel día fue buscar un algoritmo o autómata que pueda instruir a una máquina cómo comprender "el estado natural de su entorno"... o, básicamente, encontrar un programa que aprenda por sí mismo a distinguir lo que es real de lo que NO.

Mi plan inicial tuvo que ver con un robot que dispusiera de una red neuronal artificial, que aprendiera por refuerzo o por "backpropagation". Fue un ingenuo bochazo, algo así como: "la máquina podría aprender a partir de los ejemplos que se le presentan en el día a día, considerar a sus inputs como objetos reales y tomar decisiones a partir de lo percatado previamente, todo en tiempo real". Claro que si usaba una red neuronal supervisada para el diseño de mi artefacto NO supervisado, ja, además de ejemplos de manifestaciones (reales), la máquina debía contar con modelos irreales. Sólo de esta manera podía encontrar un patrón que le permitiera distinguir ambas cuestiones. He ahí el problema: de dónde sacar tales modelos?! Pues, tales NO existen, son ficticios! Cómo aprender de algo que no se puede percibir?!

Entonces, mientras caminaba por algún barrio de Córdoba, hice borrón y cuenta nueva. Para programar una máquina a solucionar cierto problema, una buena práctica es pensar como lo resolverías vos mismo, u algún otro humano... "¿Cómo incorporo YO que algo es real? ¿Cómo sé cuando algo no lo es? Y bueno, tengo memoria de lo que haya observado, escuchado, tocado, sentido en el pasado, y a ese conjunto de sensaciones lo considero real. Pero como nunca he visto un unicornio, debo asumir (aunque no lo he probado) que no existen." Pero entonces, ¿podemos efectivamente saber cuándo cierto suceso es real? Bueno, NO, porque tal como pensó Popper y otros filósofos y no filósofos como yo ( :D ), es imposible experimentarlo todo.

Es lo que pasa con las ciencias exactas: por ejemplo, si bien aseveramos que todos los objetos con masa crean un campo gravitatorio, nunca nadie logró analizar toda la masa del universo como para asegurarlo. Incluso si fuese verdad, tal experimento sería imposible, por lo que no es factible demostrar nuestra sentencia. Sin embargo, existe claramente la posibilidad de negarla en el futuro... y tal negación se logra simplemente encontrando algún elemento masivo que NO produzca un campo gravitatorio. Se dice que nuestro enunciado es falsable. Automáticamente recordamos lo que presenté en el artículo anterior: si observamos lo opuesto de x, es claro que x NO es real.

En las ciencias que no son exactas, como la biología o la zoología, suele ocurrir algo similar, pero este caso es más interesante. Algunos estudios podrían asegurar que "algunos lobos pueden recorrer hasta 100 km en busca de una presa" (lo leí en una web con info que no considero confiable; no es referencia, aunque no viene al caso). Pero que ningún zoólogo haya observado una mosca capaz de resolver un juego de Sudoku, NO significa que un insecto con tales propiedades no exista. De hecho, parece haber una infinidad de cosas que podrían SER y no las descubrimos. Y a ello me refiero con los inapreciables.

La lógica matemática nos enseña, entre muchas otras cosas, que la cantidad de verdades acerca de la teoría que involucra a la aritmética de Peano (ejemplificando) es inmensa. "Inmensa" en esta ocasión significa una cantidad mayor al cardinal de los números naturales, que es infinito, claro... Pero que los naturales sean infinitos no implica que no haya conjuntos estrictamente más grandes que N. O sea, hay infinitos más grandes que otros, y se los llama "números transfinitos". Se le dice alef-0 a la cantidad de números naturales. Pero las matemáticas también nos enseñan que la cantidad de demostraciones formales que podemos escribir acerca de la aritmética en papel, computadora o cualquier otra herramienta que para su uso requiera de un lenguaje formado por símbolos, es alef-0. O sea que hay tantas demostraciones como números naturales (de hecho, esto significa que podríamos enumerarlas a todas... la primera prueba es "tal", la segunda es "tal otra", etc), por lo que hay más verdades que pruebas. En definitiva: hay verdades de la aritmética que no se pueden probar.

De aquí a que nos preguntemos algo: ¿cuál es el cardinal del conjunto formado por todos los eventos reales? ¿Hay una cantidad infinita de ellos? Yo supongo que la respuesta a la última pregunta es positiva. Pero entonces, ¿ese infinito es mayor que alef-0? Esto lo dudo, pero no mucho, jeje... ¿qué tal si lo fuera? En tal caso, las matemáticas no podrían abordar el problema de decidir el "valor de realidad" de algunas cosas. Pero ¿un humano, con su cuerpo y mente, sí podría? Bueno, esta pregunta forma parte de una enorme discusión filosófica llamada "el problema de la mente-cuerpo"... Podrás ver que hay muchas preguntas. Analicemos a continuación algunos posibles escenarios...

1) Supongamos por un momento que hay tantos acontecimientos efectivos como números naturales... lo veo muy factible! Pero no concibo la idea de que un conjunto de personas (ya sea una sola o muchas) pueda experimentar una cantidad infinita de sensaciones, en períodos de tiempo y espacio limitados. Por ende, los inapreciables existirían, y serían aquellos objetos que están ahí, pero fuera del "alcance" de todo ensayo por falta de dimensiones. Pfff, claro que no podría poner un ejemplo de algún objeto que no podría observar!

2) Supongamos que somos simplemente máquinas que procesan información tal como lo hacen los ordenadores, dotados de una especie de lenguaje (como los lenguajes de programación). O simplemente imaginemos que la mente humana es capaz de computar cierto proceso siempre y cuando una computadora pueda hacerlo. Pero, ahora supongamos que la cantidad de eventos reales es MAYOR a la de los números naturales... sería obvio que los inapreciables existen, y son aquellas cosas que no podemos "comprender" (o procesar). Si bien no puedo dar un ejemplo, podríamos pensar en esta incapacidad como la imposibilidad de un ordenador de decidir si cierto predicado indecidible es cierto o falso (suele ocurrir que la máquina queda atascada en un bucle eterno).

3) Extendiendo el punto 2, ¿qué tal si somos más que máquinas pero aún así limitados? Supongamos que nuestra mente es más expresiva que cualquier lenguaje (incluso el de la lógica) y puede tratar con problemas más complejos. Aún así, no creo que el conjunto de cosas que pueda entender una mente sea ilimitado. Con ilimitado en este caso me refiero no a infinito, pero sí a "universal". No creo que la colección de objetos que podamos comprender sea "total" (si tal cosa es real, valga la redundancia!). Es decir, que habrá acontecimientos que ocurren fuera de este conjunto, que serán incomprensibles para cualquier mente... he allí los inapreciables.

Para concluir, me quedan algunas dudas acerca de la existencia de los "inapreciables", sin embargo no parecen ser grandes. Creo que estas cosas son un hecho, y fascinantes como también estremecedoras. En definitiva (ya no usamos el término "fenómeno"), se trata de sucesos reales que no se pueden percibir. ¿No da un poquito de miedo? A mi sí!

"Referencias" y datos locos:
http://es.wikipedia.org/wiki/Fenómeno
http://es.wikipedia.org/wiki/Noúmeno
http://es.wikipedia.org/wiki/Red_neuronal_artificial
http://es.wikipedia.org/wiki/Falsabilidad
http://es.wikipedia.org/wiki/Número_transfinito
http://es.wikipedia.org/wiki/Independencia_lógica
http://es.wikipedia.org/wiki/Problema_mente-cuerpo#El_problema_mente-cuerpo
http://es.wikipedia.org/wiki/Lenguaje_formal

Mi música!

Algo de mi música (y con amigos). Lo seleccionado desde 2004 hasta 2010. ;)

Buscá...

Buscá y encontrá lo que quieras en alguno de mis espacios (La Mezcolanza, C^2 ó mi canal en Youtube) o en alguno de los sitios amigos.

Contate algo...