# Lesson XIV Each ink keeps its own nature. The brush must not pretend otherwise. ## Try ```prolog ?- E = kernel, run(E, [push(real(2.5)), push(real(1.5)), add], [], Stack). Stack = [real(4.0)]. ?- E = kernel, infer(E, [push(real(1.0)), push(real(1.0)), eq], Scheme). Scheme = scheme([], effect(S, [bool|S])). ?- E = kernel, run(E, [push(real(2.5)), push(int(1)), add], [], Stack). false. ``` ## Lesson `real` is an extension point the constraint system was designed to accept. `numeric` and `equatable` support can grow by adding value conversion, literal, and support facts rather than by rewriting arithmetic or inference logic. ```prolog unpack(real, real(Real), Real) :- float(Real), !. pack(real, Payload, real(Payload)) :- float(Payload), !. lit(_Env, real(Real), real) :- float(Real). supports(real, numeric). supports(real, equatable). ``` [[13_lesson|Prev]] | [[15_lesson|Next]]