Challenge 3: Why is Requires a Bound Right Side and = Doesn't — Possible Solution ==================================================================== SWI-Prolog session: ?- X is Y + 1. ERROR: Arguments are not sufficiently instantiated -- Explanation, as a comment: -- -- is has a genuinely different job than =. is must ACTUALLY COMPUTE -- a real arithmetic result -- to evaluate `Y + 1` as real arithmetic, -- the system needs a concrete NUMBER for Y right now, in order to add -- 1 to it. If Y is still an unbound variable, there is no number to -- add 1 to at all -- arithmetic evaluation has no way to "solve for" -- an unknown quantity inside an expression; it can only compute with -- values it already has. This is exactly why is throws an error here -- rather than somehow succeeding. -- -- = has no such requirement, because unification's whole job is -- different: it's asking "CAN these two terms be made identical," -- which is a question that can genuinely be answered even when one -- or both sides are still unbound variables -- unification's own -- answer, in that case, is simply "yes, by binding/linking them," -- per prolog1-3's own central material. Unification doesn't need a -- concrete number to succeed; arithmetic evaluation genuinely does, -- since "compute a result" and "check if two things could be made -- equal" are fundamentally different operations with different -- requirements. WHY THIS WORKS AS AN ANSWER ------------------------------ This reproduces the real "not sufficiently instantiated" error is produces against an unbound variable, and the explanation correctly traces the restriction back to the fundamental difference between computing a concrete arithmetic result (which requires real numbers) and unification (which can succeed on unbound variables by linking them), tying back to prolog1-3's own central unification material.