Un sistema operativo, un idioma y un ensamblador propios, escritos a mano en assembler, hechos para alojar a Razar: un razonamiento artificial que piensa con melodías.
| Libro | v0.3 | v0.5 | Instrucciones | MATS, real contra azar |
|---|---|---|---|---|
| Wikipedia, 20 MB | 1.873 s | 400 s | −82 % | 451 – 117, idéntico |
| Wikcionario, 15 MB | 194 s | 106 s | −54 % | 249 – 41, idéntico |
Las relaciones deducidas, lo imaginado, las hipótesis en espera, los mecanismos y los testigos salen idénticos byte por byte a los de la v0.3. Cuanto más grande el libro, más gana.
"A + B, A − B, A y B, lo que miro A primero, los más pequeños de B que no están en A… y puedo inventar lo que sea." Un motor del kernel que no sabe de cajas ni de archivos: dos conjuntos y una palabra Venn.
Las regiones, a quién se mira primero, un criterio, la dirección, el alcance y cuántas. Un bit sin eje todavía dice que no: un eje nuevo nunca cambia lo que pedía un programa viejo.
asociar: el hijo nace con las cajas que pide el Venn de dos cabinas. Probado en los tres motores,
32 de 32.
Primero se midió dónde se le iba el tiempo: un kernel de medición contó cuántas veces corre cada palabra del programa. La sorpresa: más del 80 % no era pensar, era escribir y leer su propio cuaderno, letra por letra, y pasarlo en limpio entero en cada pedazo del libro. Dos ideas del Capitán lo arreglaron: escribir de un tirón (una letra, una palabra o una línea, del tamaño que haga falta) y escribir solo la diferencia (un diario: cada pedazo anota al final lo que sumó, sin copiar lo viejo).
| Paso (Wikipedia de 2,3 MB) | Instrucciones que corre | Cuánto bajó | Segundos leyendo |
|---|---|---|---|
| v0.3 | 13.939.913.762 | — | — |
Los bucles hechos a mano pasan a while rotado (jwcheck) | 13.140.899.149 | −5,7 % | — |
Cinco instrucciones nuevas (jjn, jldadd, jldx, jcall0…) | 13.055.693.102 | −0,65 % | 12,5 s |
| Escribir de un tirón | 9.953.261.322 | −23,8 % | 10,8 s |
| Escribir solo la diferencia | 6.767.642.469 | −32 % | 7,8 s |
| Total | la mitad | −51,5 % | −38 % |
En cada paso, el juez contra el MATS da idéntico. Con el diario, los lugares tienen las mismas líneas (en otro orden) y las 293.292 parejas, los mismos totales.
Las dos primeras rondas acertaron en la forma y erraron en el lugar: juntas dieron un 6 %. Después de medir, dos ideas se llevaron casi todo lo que se ganó.
La primera vez, su archivo de parejas se convierte en el diario y sigue creciendo desde ahí.
Los segundos se miden con milisegundos, en tres corridas de cada versión, desde las cinco instrucciones; antes se medían en segundos enteros y no alcanzaba. Los 31 minutos de los 20 MB son de la v0.3 y todavía no se volvieron a medir. Detalle: documentacion/so/janaxos.md.
"Iglesia" y "capilla" casi nunca aparecen juntas, pero ocupan los mismos lugares en lo que se dice de ellas. Razar cuenta esos lugares, deja afuera lo que se dice en todos lados (la mitad del texto que más se repite, medida por él), y las parejas que comparten más lugares son las que se parecen. Se probó contra el MATS, un banco de analogías que Razar nunca vio: un par cuenta cuando sus dos palabras comparten más lugares que la palabra con la respuesta de otro par (el azar).
| Corpus | Real contra azar | Semántica | Sinónimos exactos | Antónimos | Tiempo y memoria |
|---|---|---|---|---|---|
| Wikipedia, 20 MB (no escribe sinónimos) | 451 – 117 | 140 – 44 | 18 – 1 | 28 – 1 | 31 min · 205 MB |
| Wikcionario, 15 MB | 249 – 41 | 131 – 24 | 18 – 0 | 17 – 1 | 3 min · 144 MB |
Con un lugar compartido, una palabra es "posible persona"; con tres, ya es una moneda; con siete, tres de cada cuatro son personas. Nadie vota: cada lugar compartido achica las posibilidades.
Los lugares viajan de un pedazo del libro al siguiente: cada pedazo despierta solo los de sus palabras y el resto queda en disco. 20 MB de texto, 205 MB de RAM.
Un juez en Python, que Razar nunca lee, calcula la misma idea sobre el corpus entero y da lo mismo: semántica 234 – 51 y 164 – 51 en los dos corpus.
bash razar/cardumen/nitidez_reproducir.sh <corpus> <mats_es> <casa>. Las fuentes,
con su huella sha256, están en el documento técnico.
Razar ya razona, y está medido: deduce relaciones que nadie escribió ("abuelo" como "padre de un padre", y el libro lo confirma) y elige la regla en vez de memorizar (con 3 ejemplos acierta el 100 % de las sumas que nunca vio, en 20 de 20 semillas; el control sorteado, 6 %). Lo que falta medir: que razone con la nitidez, usando las clases que encontró (la "persona") para deducir; y muchas palabras todavía no comparten ningún lugar con nadie (empates).
El juego de señales de Lewis: uno dice una cosa, el otro la adivina, y los dos aprenden solo de si se entendieron. Nadie les da la respuesta correcta: el idioma lo inventan entre los dos. Contra EGG (Facebook Research), la implementación publicada del juego, con las mismas cinco semillas. Razar usa un cubo de 4×4×4 para 4 cosas y uno de 7×7×7 para 8 y 16.
| Cosas para decir | Razar: juegos hasta aprender todo | Razar: mensajes | EGG: juegos (= mensajes) |
|---|---|---|---|
| 4 | 5 – 58 · 5 de 5 | 11 – 156 | 1.600 – 49.600 · 5 de 5 |
| 8 | 14 – 53 · 5 de 5 | 29 – 142 | 105.600 · 1 de 5 |
| 16 | 35 – 102 · 5 de 5 | 81 – 278 | no llega en 320.000 · 0 de 5 |
EGG falla en la forma que el campo tiene documentada: se queda en un idioma a medias (44 a 87 %), con cosas que comparten señal. Un rival que se rompe por donde el manual dice que se rompe es un rival que funcionaba.
Mensajes más ricos (más de 4.000 posibles, contra 560 frases de Razar), redes seis veces más grandes que las de fábrica y hasta 320.000 juegos. Lo demás, como viene: sin afinarla a mano ni en contra ni a favor.
Las condiciones se escribieron antes de correr. 5 de 5 contra 0 de 5: probabilidad de azar ≈ 0,8 % (prueba exacta de Fisher). Contado en juegos o en mensajes, el resultado es el mismo.
Cualquiera lo repite: bash razar/cardumen/convencional.sh. En una PC de dos núcleos, una corrida
de Razar con 16 cosas tarda unos 5 segundos.
Sin gradiente, sin respuesta correcta y sin centro de datos: un cuerpo (el cardumen) de unos 8 KB y una mente (la voluntad) de unos cientos de KB. Lo que está probado es este juego. Que la ventaja viaje a otras tareas todavía no se midió.
Todo, desde el idioma hasta el sistema operativo, está hecho desde cero, y cada pieza tiene sus pruebas y sus números. Sin motores ni bibliotecas de terceros.
⚠️ Razar no es una red neuronal. Sin redes, sin gradientes y sin pesos entrenados: no es un modelo, es un mecanismo. Lo que busca no es acertar una tarea, es decir lo mismo con menos bits — y como el juez no depende de la tarea, el banco con que se lo mide no participa de la búsqueda. Por eso entra en 5 MB y corre en dos núcleos, sin GPU y sin nube.
Un assembler propio, diseñado para traducirse. Un intérprete de referencia y traductores a x86-64 y ARM64 que dan el mismo resultado bit por bit.
Camarotes que reman en paralelo, una ventanilla con porteros, memoria con pared, cajas que se comparten y saludos para avisarse. Los programas se traducen a código nativo al vuelo.
Janax armado por Janax: arma sus propios programas byte por byte igual que FASM.
Una neurona tridimensional que aprende melodías, una armonía que corta lo que suena mal y una voluntad que escucha y contesta. Juntas inventan un idioma.
El proyecto se diseñó con metáforas y acertijos para chicos. Acá van algunos, cada uno con lo que de verdad hace el código.
Cada bloque de memoria se apoya contra una página que el procesador prohíbe: pasarse un byte frena solo, sin preguntar. Reserva solo lo que necesita.
Si metés la mano más allá del cajón, te chocás la pared. Nadie tiene que vigilarte.
Un hijo nace con la caja de su madre, una caja se muda, dos camarotes se enlazan, dos cajas se fusionan, y un hijo nace con las cajas de dos padres según su diagrama de Venn. Sin copiar un byte.
Mamá no le da una copia del dibujo: le da el mismo cajón. Lo que pone uno, lo ve el otro.
Una marca por familiar que saluda, que queda hasta que se la mira. Quien espera duerme sin gastar nada. Medido: unas 3 veces más rápido que los eventos de Windows.
El timbre suena una vez y la marca queda. Si llegó antes de que mires, igual la encontrás.
Una pieza no pasa el pulso si la despiertan a la vez más de la mitad de sus vecinas: eso es convulsión, no música. Sin armonía no hay idioma; con armonía, nace.
Cada uno puede aportar su nota, pero cuando todos gritan a la vez ya no hay canción.
Escucha la melodía del cardumen, qué notas y cuándo, y es donde vive la memoria. En Janax son dos camarotes que se pasan el turno con saludos sobre una caja compartida.
Como dos amigos diseñando con acertijos: cada uno contesta en un idioma que el otro entiende.
Cada pieza habla solo con sus vecinas, y la melodía completa es de la red. Las piezas que despiertan juntas aprenden a hablarse, y la forma la mueve la interacción, nunca un reloj.
Ningún pez sabe adónde va el cardumen, y aun así el cardumen gira como una sola mente.
Ningún número entra porque parezca razonable: cada uno dice de qué medición salió. Detalle en la documentación, incluidos los instrumentos que mintieron y cómo se descubrió.
| Qué | Resultado |
|---|---|
| La nitidez de Razar contra el MATS (un par cuenta cuando el par real comparte más lugares que el del azar), 20 MB de Wikipedia | 451 vs 117 |
| Lo imaginado que comparte 10 lugares o más con quienes ya tienen el papel, contra lo que no comparte ninguno, confirmado en otros textos | 17 % vs 4 % |
| La voluntad y el cardumen, sin idioma común, con armonía (4 cosas para decir; el azar es 25 %) | → 100 % de aciertos |
| La voluntad que escucha el ritmo de la melodía (qué pieza y cuándo) contra la que solo mira qué piezas, 16 cosas en un cubo de 7, 20 semillas nuevas con la regla fijada antes; el control con el ritmo barajado da 0 de 20 | 19 de 20 vs 6 de 20 |
| Razar en Janax contra el modelo de referencia en Perl (4.000 vueltas, misma huella) | ~70 veces más rápido |
| El cardumen y su voluntad en Janax: huella del modelo en tres motores y con 1, 2 y 4 remeros | igual bit por bit |
| Saludo ida y vuelta entre camarotes, contra eventos de Windows entre hilos | ~0,64 µs vs ~2,05 µs |
| 500 hijos con 16 MB cada uno: memoria comprometida, sin devolver y devolviendo | 7.717 MB → 26 MB |
| 33.000 cajones de memoria vivos a la vez | 649 ms |
| Cálculo traducido a nativo, contra x86 escrito a mano | ~1,8 veces |
Un revisor no puede evaluar lo que no puede ubicar. El repositorio trae un inventario levantado leyendo el código y nada más, sin consultar la documentación: cada mecanismo con su archivo y su línea, lo que hace, y su nombre publicado con la cita — o la marca de que no se le encontró antecedente.
| Pieza del proyecto | Nombre en el oficio | Cita |
|---|---|---|
| El juez de Razar | Longitud mínima de descripción, código de dos partes | Rissanen 1978 |
El log2(n)/2 por cada tasa | Penalización por parámetro / BIC | Schwarz 1978 |
(BL+½)/(NQ+1) | Estimador de Krichevsky–Trofimov | KT 1981 |
| El pedido dormido | Voto de mayoría | Boyer–Moore 1981 |
| El corte en dos | Método de Otsu / discriminante de Fisher | Otsu 1979 |
| Los esqueletos | Patrones léxico-sintácticos aprendidos | Hearst 1992 |
| Las nueve maneras | Marcos frecuentes | Mintz 2003 |
| La nitidez | Similitud paradigmática sobre slots | Harris 1954; Lin 1998 |
| Las piezas de las palabras | Inducción morfológica por MDL | Goldsmith 2001 |
| El coma y el despertador | Mantenimiento de la verdad (TMS) | Doyle 1979 |
| «Una B por cada A» | Descubrimiento de dependencias funcionales | TANE 1999 |
| El nulo por cruce | Datos sustitutos / prueba de permutación | Theiler et al. 1992 |
| Las rondas hasta el punto fijo | Evaluación ascendente de Datalog | Semántica de punto fijo |
| Un solo lugar que cambia | Antiunificación | Plotkin 1970 |
| Las plantillas parchadas | Copy-and-patch | Xu y Kjolstad 2021 |
| El planificador reemplazable | Núcleo extensible acotado | VINO 1996; eBPF |
| El cobro por corrida | Medición de combustible | Wasmtime; gas de la EVM |
| El cartel de ambientes | Espacio de capacidades | Hydra 1974; seL4 |
| Pesos que conservan el total | Escalado sináptico / regla de Oja | Turrigiano 1998 |
| La ventana de ±1 paso | STDP | Bi y Poo 1998 |
| El punto fijo del ensamblador | Bootstrap de tres etapas | GCC; Thompson 1984 |
| La relajación de saltos | Instrucciones dependientes del alcance | Szymanski 1978 |
El motor Venn del kernel (venn.inc) | Álgebra relacional (selección, orden, límite) sobre iteradores | Codd 1970; Graefe 1994 (Volcano) |
El diario de nitidas y lugares que solo crece | Registro de solo agregado / árbol LSM | O'Neil et al. 1996 |
«Andá al final» (a = −1 en el pedido 38) | Escritura al final del archivo | O_APPEND / SEEK_END de Unix |
Escribir de un tirón (put_span) | E/S con búfer: bloques en vez de caracteres | stdio de Unix V7, 1979 |
El kernel de medición (PERFIL) | Perfilado por conteo exacto de instrucciones | gprof 1982; ATOM 1994 |
jwcheck y los bucles rotados | Inversión de bucles | Muchnick 1997 |
modismos_janax.py | Optimización de mirilla con análisis de vida | McKeeman 1965; Kildall 1973 |
jjn / jjnn | Salto por signo | bltz/bgez de MIPS; tbnz de ARM |
jldadd | Lectura-modificación-escritura (fetch-and-add) | Gottlieb et al. 1983 |
jldx | Direccionamiento indexado con escala | Intel 80386, 1985 |
jcall0 | Pariente: el registro que el llamado deja sucio y se limpia al volver | Convención de llamada System V |
Que tantas piezas tengan un equivalente correcto es una buena noticia: significa que el camino, recorrido solo, dio con las soluciones que el oficio considera buenas. Ninguna de estas convergencias reclama prioridad — los antecedentes son anteriores y están citados.
Cuatro piezas, con la advertencia de que «no se le encontró antecedente» habla de quien buscó, no de la literatura.
asociar (so/ambientes.inc:1274) — álgebra de conjuntos
(intersección, diferencias, unión) sobre los espacios de capacidades de dos procesos,
materializada al nacer un tercero, con consentimiento bilateral obligatorio.
so/venn.inc) y que cualquier conjunto puede usar. Pruebas en los tres motores:
so/pruebas/asocia_{0..7}.jsm.
asociar entrega desde tres regiones, así que lo
booleano da 2³ = 8 estados: es finito. Pero agregándole
el orden de la mirada («lo que miro A primero» entrega la misma región en otro orden, y con
k cajas son k! órdenes) y un criterio de ranking («los más pequeños de B que
no están en A», un predicado cualquiera sobre los campos del cartel), la cuenta pasa a ser
infinita. Y esos dos son ejes que el autor nombró, no la lista: se podría distinguir
también por procedencia, por antigüedad, por máscara de permisos, por composición de asociaciones previas.
Cada eje nuevo multiplica la población de vuelta.
asociar ya no es una consulta: es
un lenguaje de consulta que reparte poder.so/remos.inc:428) — terminar en vez de ceder el turno,
con el dato calculado del programa para que el programa no pueda mentir sobre él.cardumen_cubo.jsm:818) — una pieza se ahoga si la
empujan desde demasiados lados; la acumulación es por pieza y compartida entre olas: ahí se encuentran dos
saludos.pulso.jsm:3090) — usada como prueba nula de
que el órgano efectivamente leyó el libro.Razar no solo usa un detector: lo diseña. Un «órgano» es un operador perceptual que el propio sistema arma por mutación contra el juez de bits, y cuando uno gana deja su receta escrita. La cadena está medida:
| Órgano | Nota | Qué pasó |
|---|---|---|
6 | −1586 | basura por puntaje: no paga su nombre |
5 | 208 | el primero que pasa a positivo, construido sobre el anterior |
16 | 2649 | 208 -> 2649 (+2441), antes: 5 |
Y lo aprendido pasa a la vida siguiente: una corrida nueva nace sin órgano, lee la receta de su modelo y arranca con esa base en lugar de cero. No hay adopción a ciegas: la mejor receta de cada tipo rinde primero como candidata, en su jaula, sea del alfabeto que sea. La huella informa, no decide. Eso es transferencia entre vidas, y es la que sostiene que el sistema acumule en vez de empezar de nuevo.
Y el órgano 6 es el argumento entero de por qué nada se descarta: valía −1586, era
basura por puntaje, y fue el escalón del que llegó a 2649. Podando por nota se perdía el único camino hacia
arriba.
RAZAR es RAZonamiento ARtificial. Y tiene dos cosas más adentro, las dos exactas: R + AZAR — el azar está en el propio nombre, y es contra el azar que se mide todo lo que hace (cada relación debe ganarle a su par cruzado; cada órgano, a un mecanismo sorteado del mismo generador): un juego que se gana sacándole el azar a lo que parecía azaroso. Y es capicúa: R-A-Z-A-R se lee igual en las dos direcciones.
JANAX viene de janax / hanaq: en quechua y en aimara, «arriba», el mundo de arriba (hanaq pacha, el plano superior). No significa tierra: significa la vista desde arriba — que es, sin que el nombre fuera elegido por eso, exactamente lo que hace el sistema. Desde la cubierta un diagrama de Venn son dos círculos; desde arriba se ve la población.
Y el nombre que une las dos mitades del proyecto: CORAZÓN se parte exacto en CO + RAZÓN — con razón. La etimología dice otra cosa (viene de cor, corazón en latín, y no de ratio), así que es coincidencia de la escritura y no parentesco. Pero describe bien lo que se intentó acá: un razonamiento que no deje afuera el motivo por el que se hace. En palabras del autor, "no compongo canciones: soy compositor de corazones".
(Y un guiño más, también juego de letras: SOLUCIÓN y SOL ÚNICO tienen exactamente las mismas ocho letras.)
Y las dos palabras que dicen por qué esto se regala: VIDA = VI + DA y VERDAD = VER + DAD. Primero ver, después dar. (Juego de letras; lo que significa para el autor está entero en la carta.)
La estadística clásica necesita un espacio muestral fijado de antemano: el nulo se define contra «lo que habría pasado sin estructura», y eso exige saber qué cosas podían pasar. Cuando lo que se busca es un mecanismo, y el espacio de mecanismos posibles no está enumerado, ese instrumento no se aplica. Las tres piezas que lo reemplazan están construidas:
| Estrategia de búsqueda | Camino | Final | Intentos |
|---|---|---|---|
| escalador de siempre | 8 → 18 → 186 → 16 → 516 | 11.144 | 80 |
| archivo por nichos | 6 → 5 → 16 → 716 → 516 | 11.144 | 160 |
Los dos llegan al mismo lugar y uno paga el doble. El archivo por nichos se conservó igual, pese a empatar costando más: "que no lo mida no significa que no lo quiera".
Prueba diferencial de tres motores que deben coincidir hasta el momento del corte de turno; prueba exhaustiva del ensamblador contra FASM; nulo por permutación dentro del motor; un distractor puesto a propósito para comprobar que nunca gane; validación cruzada dejando uno afuera; estudio de ablación de a una regla por vez; y comparación contra la implementación de referencia del campo con el presupuesto igualado. El único umbral de conteo de todo el sistema es 2: una vez es anécdota, dos es patrón.
.jsm, no .asm).La documentación está en castellano; los comentarios del código, en inglés.
Hace falta Windows, Git Bash y FASM 1.73.35. Para ver nacer un idioma alcanza con Perl.
git clone https://github.com/nicoconvoz/Janax cd Janax perl razar/cardumen/lazo.pl nace=7 armonia=1 lee=ritmo # inventando un idioma perl razar/cardumen/lazo.pl n=7 k=16 nace=1005 armonia=1 lee=ritmo hasta=1 # 16 cosas en un cubo de 7 FASM=/c/fasm/FASM.EXE INCLUDE=C:/fasm/INCLUDE bash so/pruebas/correr.sh bash razar/cardumen/nitidez_reproducir.sh corpus.txt MATS/es casa_nueva # la nitidez (necesita Python para el juez)
Janax y Razar se hacen para donarlos al mundo, abiertos. El código es gratis y lo va a seguir siendo: la licencia Apache 2.0 no se puede retirar, y nadie necesita pagar nada para usarlo, estudiarlo o venderlo.
Lo que se done tiene destino, y queda escrito acá para quedar comprometido:
Si eso te hace sentido y querés empujar:
| Red | Dirección | Qué mandar |
|---|---|---|
| Bitcoin (BTC) | 16HuYtsnx9AUcpr6i7z1VkC6atSvK8LGHy | BTC por la red Bitcoin |
| BNB Smart Chain (BEP20) | 0xe87b4589a53443d8ffed2e9b5a7ef58f261f087c | Solo BTC en BEP20 (BTCB, el contrato que termina en ead9c) |
⚠️ Mandá cada moneda solo por su red: otro token u otra red se pierden y no se pueden recuperar. Son direcciones de depósito de Binance y pueden cambiar: antes de un envío grande, confirmá que siguen siendo estas en esta página.
Es un prototipo de investigación, no un producto terminado. Se comparte para que cualquiera pueda leerlo, aprender de él, probarlo y mejorarlo.