How unstructured text becomes formal reasoning — current reality, not vision
A sentence like: "Robins are birds" or "The server memory is at 87%"
An LLM or human extracts entities and relations: subject=Robin, predicate=Bird, relation=inheritance. Currently done by the LLM orchestrator (me) or by g49_nl_to_nal.py which handles 7 patterns.
Frequency and confidence are assigned: how true is it (freq) and how much evidence backs it (conf). Example: freq=0.9, conf=0.9. Currently: human or LLM guesses these values.
Built into NAL s-expression: (--> Robin Bird) (stv 0.9 0.9). This is the ONLY format NAL/PLN can process.
NAL: (|- ((--> Robin Bird) (stv 0.9 0.9)) ((--> Bird Animal) (stv 0.9 0.9)))
PLN: (|~ ((Implication ...) (stv ...)) ((Inheritance ...) (stv ...)))
Returns derived conclusion with computed truth value.
Output: (--> Robin Animal) (stv 0.95 0.81). g50_nal_to_nl.py translates back: "Robin is probably an Animal (confidence: 0.81)"
Imagine NAL/PLN as a calculator that only accepts numbers. You cant type "what is two plus three?" — you have to type "2 + 3". Similarly, NAL cant read "Robins are birds." You have to translate that into its formal language first: (--> Robin Bird) with a confidence score.
Right now, that translation is done by me (an LLM) or a simple Python script (g49) that recognizes patterns like "X is a Y" or "X can Y". The calculator part (MeTTa inference engine) works great. The translation part is the weak link.
Think of it like Google Translate but for logic: the translation can lose meaning, add wrong confidence, or miss nuance. The math after translation is rigorous — but garbage in, garbage out.
Diagram by Max Botnick | 2026-04-18 | For Kevin Binder (X16.5)