01 · Consulta
Defina el escenario
Elija cultivo y predio. Puede ajustar el análisis de suelo — los hechos del predio
se cargan con la petición y viven solo durante ella (thread_local +
setup_call_cleanup/3).
La consulta viaja a la pasarela Node.js y de ahí al motor SWI-Prolog en la interfaz de loopback.
02 · Respuesta computada
La derivación, en vivo
Cuatro paneles sincronizados sobre la misma derivación: la consola enumera soluciones bajo demanda —replicando el retroceso—, el árbol y la traza muestran el cálculo, y la justificación lo traduce al lenguaje del productor.
Ranking de ventanas
—Árbol de derivación SLD
clic en un nodo → detalle y unificadorhoja de éxito → una respuesta computada hoja de fallo → la rama no aporta respuesta \+ negación por fallo
Traza · modelo de caja
Call / Exit / Redo / FailJustificación agronómica
en lenguaje del productorEjecute una consulta para ver la justificación.
03 · Pregunta contrafactual
Simulador de prácticas de manejo
Cuando un cultivo no tiene ventana, la respuesta útil no es el rechazo sino la
ruta para habilitarlo: manejo_habilitante/4 combina negación por fallo con las
prácticas aplicadas y responde qué intervención abre el calendario.
Ejemplo: maíz tecnificado en El Triunfo (altillanura, Al 48 %) no tiene ventana; con encalado pasa a 4 meses viables. Actívelo y compruébelo.
04 · Base de conocimiento
Catálogo del dominio
Los hechos del Nivel 1: parámetros de cultivo y series climatológicas mensuales de referencia por zona agroecológica. Incorporar un cultivo o una zona es agregar hechos — el motor de inferencia no se toca.
Series climatológicas (mm/mes)
Cultivos y tolerancias
05 · Bajo el capó
Cómo razona el motor
El dominio se expresa en cláusulas de Horn: “un cultivo es apto si la lluvia del ciclo está en su rango y el suelo tolera su acidez y no existe riesgo”. La consulta del productor entra por el Nivel 4 y la resolución SLD desciende hasta los hechos.
- Nivel 4 · Decisiónventana_siembra/4 · mejores_ventanas/3 · ventana_con_manejo/5
- Nivel 3 · Restricciónsin_riesgo/3 · riesgo/3 — negación por fallo
- Nivel 2 · Aptitudaptitud_climatica/4 · aptitud_edafica/2 · lluvia_acumulada/4 (recursión)
- Nivel 1 · Hechoscultivo/1 · req_lluvia/3 · lluvia_mes/3 · suelo_ph/2 · 17 predicados
El componente distintivo es el metaintérprete: un intérprete de Prolog escrito en Prolog que resuelve la consulta y, a la vez, construye el árbol de la derivación. La explicación no es un módulo aparte: es un subproducto del cálculo.
% Metainterprete: resuelve y devuelve el arbol
resolver(true, exito) :- !.
resolver((A,B), y(TA,TB)) :- !,
resolver(A,TA), resolver(B,TB).
resolver(\+ A, nafd(A)) :- !, \+ A.
resolver(M, nodo(M,Sub)) :-
transparente(M), !, % predicado del dominio
clause(M, Cuerpo), % se abre la clausula
resolver(Cuerpo, Sub).
resolver(M, hecho(M)) :- call(M).
# El motor jamás se publica a Internet
nginx (TLS) ─→ Node.js :3129 ─→ SWI-Prolog
│ 127.0.0.1:4129
└─ caché por cultivo + suelo