CAS = computer algebra system,
they have constraint stores:
sage: x, y, z = var('x y z')
sage: assume(x, 'integer')
sage: assume(y > 0)
sage: assume(y**2 + z**2 == 1)
sage: assume(x < 0)
sage: assumptions()
[x is integer, y > 0, y^2 + z^2 == 1, x < 0]
Even a variable projection API:
sage: assumptions(x)
[x is integer, x < 0]
sage: assumptions(x, y)
[x is integer, x < 0, y > 0, y^2 + z^2 == 1]
sage: assumptions(z)
[y^2 + z^2 == 1]
http://doc.sagemath.org/html/en/reference/calculus/sage/symbolic/assumptions.html
Also in Python sympy and elsewhere seen.
Currently trying some Prolog OO
to bootstrap a simple Prolog based CAS:
https://plus.google.com/+JekejekeCh/posts/L9ob4Qu2ScW
After datatypes integer, rational,
will try a datatypes symbolic, and
do something with attribute variables.