Con la de números, operaciones, funciones, constantes famosas y expresiones de todo tipo que suele contener una calculadora, ¿qué pensarías si te dijera que todas pueden generarse utilizando una única función y el 1? Posiblemente, que es imposible o que, si fuera posible, la función debe ser extremadamente compleja.
Pues parece ser que ni lo uno ni lo otro. En los próximos párrafos te cuento de qué va la historia.
El astrofísico polaco Andrzej Odrzywolek subió hace un par de semanas un trabajo a arXiv en el cual describía cómo generar todo lo que suele aparecer en una calculadora científica con un único operador junto con la constante 1. El artículo es All elementary functions from a single operator, y os recomiendo que leáis tanto el pdf principal del artículo como el de información suplementaria que aparece un poco más abajo del enlace del pdf.
Dicho operador, llamado Exp-Minus-Log (EML), es la siguiente función de dos variables:
\[ \text{eml}(x,y)=e^x-\ln (y) \]
Como podéis ver, la función no es nada complicada de construir. Básicamente, lo que muestra Andrzej en su trabajo es que podríamos trabajar únicamente con una calculadora como ésta y podríamos obtener con ella todo lo que se puede conseguir con una calculadora científica que muchos tenemos por casa:

Veamos algunos ejemplos. Posiblemente, el más sencillo sea generar el número e:
\[ \text{eml}(1,1)=e^1-\ln (1)=e-0=e \]
Por tanto, cualquier valor de la función \( e^x \) puede generarse así:
\[ e^x=\text{eml}(x,1) \]
Generar la función \( \ln (x) \) tampoco es muy difícil, pero ya la expresión se complica un poco:
\[ \ln (x)=\text{eml}(1,\text{eml}(\text{eml}(1,x),1)) \]
Vamos a confirmarlo:
\[ \begin{array}{l} \star \text{eml}(1,x)=e-\ln (x) \\ \star \text{eml}(e-\ln (x),1)=e^{e-\ln (x)}-\ln (1)=e^e \cdot e^{-\ln (x)}=\frac{e^e}{x} \\ \star \text{eml} \left ( 1,\frac{e^e}{x} \right )=e-\ln \left ( \frac{e^e}{x} \right )= \\ =e-\ln(e^e)+\ln (x)=e-e \cdot \ln (e)-\ln (x)=e-e+\ln (x)=\ln(x) \end{array} \]
De formas parecidas, podemos generar la resta de dos números \( x,y \)
\[ x−y=eml(eml(1, eml(eml(1,x), 1)), eml(y,1)) \]
la función \( -y \)
\[ −y=eml(eml(1, eml(eml(1, eml(1,eml(eml(1,1),1))), 1)), eml(y,1)) \]
o la suma de dos números \( x,y \)
\[ x+y=eml(eml(1, eml(eml(1,x), 1)), eml(eml(eml(1, eml(eml(1, eml(eml(1,1),1)), 1)), eml(y,1)), 1)) \]
Con todo esto, podríamos generar fácilmente, por ejemplo, el producto de dos números \( x,y \), ya que
\[ x \cdot y=e^{\ln (x)+ \ln (y)} \]
o el inverso de un número \( y \ne 0 \), al ser
\[ \frac{1}{y}=\text{eml}(-\ln (y),1) \]
En algunas de estas expresiones (y en otras más complejas), es necesario ampliar los números reales permitiendo las expresiones siguientes:
\[ \begin{array}{l} \ln (0)=-\infty \\ e^{-\infty}=0 \\ \ln (+\infty)=+\infty \\ e^{+\infty}=+\infty \end{array} \]
He estado jugando con Claude para que me ayudara a generar algunas de estas expresiones, y la verdad es que no lo ha hecho nada mal. Le he definido la función EML y le he contado las reglas de usar sólo esa función y el 1 y que se permiten esas expresiones que involucran al infinito y la verdad es que lo ha hecho bastante bien. Las de la resta, el opuesto, la suma y el inverso las he conseguido con su ayuda.
Otra de las que le he pedido es la expresión del número \( \frac{1}{2} \). Os pongo el desarrollo que me ha hecho solamente pidiéndole que me genere ese número con las reglas anteriores:
- Primero, genera el cero:
\[ 0=\text{eml}(1,\text{eml}(\text{eml}(1,1),1)) \] - Después, el \( ln (0) \), al que ya llama directamente \( -\infty \):
\[ −\infty=\text{eml}(1,\text{eml}(\text{eml}(1,\text{eml}(1,\text{eml}(\text{eml}(1,1),1))),1)) \] - Tras esto, escribe el \( -1 \):
\[ −1=\text{eml}(−\infty, \text{eml}(1,1)) \] - Después, el \( \frac{1}{e} \):
\[ \frac{1}{e}=\text{eml}(−1, 1) \] - A continuación, el \( 2 \):
\[ 2=\text{eml}\Big(0, \frac{1}{e} \Big) \] - Con ello, el \( -\ln (2) \):
\[ −\ln (2)=\text{eml}(−\infty, 2) \] - Y ya, para finalizar, el \( \frac{1}{2} \):
\[ \frac{1}{2}=\text{eml}(−\ln (2), 1) \]
Ésta es la manera en la que Claude ha generado el \( \frac{1}{2} \) (no sé si habrá un camino más corto). Por cierto, tras esto le pedí que me diera la expresión completa en términos de EML y 1 anidando todo lo que había generado por pasos y me dio la siguiente bestialidad
\[ \begin{array}{l} \frac{1}{2}=\text{eml}\Bigg(\text{eml}\bigg(\text{eml}\Big(1,\text{eml}\big(\text{eml}(1,\text{eml}(1,\text{eml}(\text{eml}(1,1),1))),1\big)\Big),\\ \text{eml}\Big(\text{eml}(1,\text{eml}(\text{eml}(1,1),1)),\ \text{eml}\big(\text{eml}(\text{eml}(1,\text{eml}(\text{eml}(1, \\ \text{eml}(1,\text{eml}(\text{eml}(1,1),1))),1)),\text{eml}(1,1)\big),1\Big)\bigg),\ 1\Bigg) \end{array} \]
Os invito a que comprobéis si es correcta.
Se me ocurrió generar precisamente el \( \frac{1}{2} \) como antesala de la definición de la función
…y en este punto es donde he encontrado algo que no me ha quedado del todo claro de este tema: me da la sensación de que hay algo de argumento circular a la hora de indicar cómo generar el número \( \pi \) y la unidad imaginaria \( i \). Con las expresiones que he visto, que son
\[ \begin{array}{l} \pi=\sqrt{-L(-1)^2} \\ i=-\frac{L(-1)}{\pi} \end{array} \]
tengo la sensación de que necesita \( i \) para generar \( \pi \) (por \( L(-1)\)) y, después, utiliza \( \pi \) para dar la expresión de \( i \). Evidentemente, debe haber algo que no he entendido bien o que se me ha escapado. Por ello, os pido que, quien pueda, me lo aclare en los comentarios.
Como no podía ser de otra forma, ya han aparecido aplicaciones web que simulan una calculadora de este tipo y con las cuales se puede jugar. La que yo he visto (aquí)) es Two Buttons Calculator, bastante chula, por cierto. Si conocéis alguna más, podéis dejar el enlace en los comentarios.
Y como podéis imaginar, esto no parece tener mucha aplicación en la práctica diaria, aunque no tengo claro si podrá tenerla en el campo de la informática y la programación. De todas formas, la verdad es que es algo bastante curioso y, al menos a mí, me parece sorprendente que algo con una descripción tan simple no hubiera sido descubierto ni descrito hasta ahora.
Me enteré de esto gracias a este tuit de @mike_mates y después también lo vi en este post de instagram de Saúl Cortés.
Por cierto, he visto que su cuenta de Twitter es ésta: @AndrzOdrz. Y no sabéis la sorpresa que me he llevado cuando, al entrar, veo que me tiene bloqueado en esa red social. No tengo ni idea del porqué, ya que no recuerdo haber interactuado nunca con este señor…
Las dos imágenes del post han sido generadas con Gemini.
¿Te ha gustado la entrada? Puedes invitarme a un café, Gauss te lo agradecerá 😉



A veces te (nos) bloquean porque les salen muchos posts tuyos (nuestros) y no son de su interes, no necesariamente porque haya habido una interaccion negativa.
Anda, pues no había caído en que podía ser eso. Bueno, qué le vamos a hacer. Gracias por el aporte.
Dicen que podría ayudar a los LLM a generar matemáticas con menos errores, ya que las operaciones con EML se pueden desglosar fácilmente como un grafo y luego recorrer el grafo sistemáticamente. Vamos, que es una operación más cómoda de automatizar que nuestras matemáticas humanas.
Algo he leído en ese sentido, pero teniendo en cuenta el tamaño de los grafos que salen para cualquier pequeña cosa…
Estaremos pendientes de todas formas. Gracias por tu comentario.