# 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]]