Safe type tests.
"si" stands for "sufficiently instantiated". It can also be read as "safe inference", so possibly also other predicates are candidates for this library.
A safe type test:
throws an instantiation error if the argument is not sufficiently instantiated to make a sound decision
succeeds if the argument is of the specified type
atom_si(A) yields an instantiation error if
A is a variable. This is logically sound, since in that case the argument is not sufficiently instantiated to make any decision.
The definitions are taken from Safer type tests in Prolog.
?- chars_si(Cs). error(instantiation_error,list_si/1). ?- chars_si([h|Cs]). error(instantiation_error,list_si/1). ?- chars_si("hello"). true. ?- chars_si(hello). false.