Saltar al contenido
giron.ai
← Proyectos

One Second Solver / Algebry Inc.

Un motor de reglas puede resolver matemática simbólica paso a paso, como lo haría un profesor.

Cuándo
2010–2017
Con
Java, motor de inferencias, App Store + Google Play, +8.000 usuarios

Mi primera empresa. Un computer algebra system completo, nacido en un salón de la Universidad Tecnológica de Panamá.

La decisión de diseño que lo definió todo: no calcular el resultado, sino reproducir el razonamiento. Un motor de inferencias con reglas lógicas que elegía el método como lo haría una persona frente al pizarrón, y mostraba cada paso intermedio. Un CAS que devuelve x²/2 es una calculadora; uno que explica por qué aplicó sustitución trigonométrica y no partes es un tutor.

El alcance real

Aritmética, pre-álgebra y álgebra. Ecuaciones e inecuaciones lineales y cuadráticas. División larga de polinomios. Demostración de identidades trigonométricas y productos notables. Límites por factorización, racionalización y L’Hôpital. Derivadas, incluida la derivada por definición. Integrales definidas, trigonométricas, por sustitución, por partes, por fracciones parciales, por sustitución trigonométrica y por series de Taylor. Ecuaciones diferenciales.

Además: reconocimiento de audio para dictar el problema, gráficas interactivas e historial de ejercicios.

Lo que demostró

Que un motor simbólico bien diseñado no necesita aprender de datos para ser útil — necesita que alguien codifique el razonamiento correctamente. Quince años después, esa distinción entre calcular y explicar es exactamente la que separa un LLM que responde de uno en el que puedes confiar.

Ganador de un concurso nacional de innovación en 2012 y del EO Global Student Entrepreneur Award Panamá en 2017, con el que representamos a Panamá en Frankfurt.

La regla, en código

La integración por partes no es una fórmula que se aplica: es una regla que primero tiene que decidir si aplica, y luego elegir bien el corte.

∫u dv=uv−∫v du\int u\,dv = uv - \int v\,du
/** ∫ u dv = uv − ∫ v du. Sólo dispara si el integrando factoriza
 *  en algo que se deriva bien y algo que se integra bien. */
final class IntegracionPorPartes implements Regla {

    @Override
    public boolean aplica(Nodo integrando) {
        return integrando.esProducto()
            && LIATE.clasificable(integrando.factores());
    }

    @Override
    public Paso ejecutar(Nodo integrando, Variable x) {
        // LIATE decide quién es u: logarítmica, inversa, algebraica,
        // trigonométrica, exponencial. El orden importa. Elegir mal no
        // da un resultado incorrecto: da una integral peor que la de
        // partida, y el motor entra en bucle.
        Particion p = LIATE.partir(integrando.factores());

        Nodo du = Derivada.de(p.u(), x);
        Nodo v  = Integral.de(p.dv(), x);

        return Paso.de(
            Resta.de(Producto.de(p.u(), v), Integral.de(Producto.de(v, du), x)),
            "Integración por partes con u = " + p.u() + ", dv = " + p.dv()
        );
    }
}

Cada Paso lleva su justificación en texto porque el producto no era el resultado: era la explicación. Y las series de Taylor —

f(x)=∑n=0∞f(n)(a)n! (x−a)nf(x)=\sum_{n=0}^{\infty}\frac{f^{(n)}(a)}{n!}\,(x-a)^n

— son otra regla más del mismo motor, con su propia condición de disparo.

Fuentes

Escríbeme

Si estás pensando en hacer algo con IA y quieres hablarlo con alguien que ya lo puso en producción, escríbeme. Contesto yo.

hola@giron.ai