The Unknown truth value¶
The Unknown object is used in Sage in several places as return value
in addition to True and False, in order to signal uncertainty
about or inability to compute the result. Unknown can be identified
using is, or by catching UnknownError from a boolean operation.
Warning
Calling bool() with Unknown as argument will throw an
UnknownError. This also means that in the following cases,
and, not, and or fail or return a somewhat wrong value:
sage: not Unknown         # should return Unknown
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
sage: Unknown and False   # should return False
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
sage: Unknown or False    # should return Unknown
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
>>> from sage.all import *
>>> not Unknown         # should return Unknown
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
>>> Unknown and False   # should return False
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
>>> Unknown or False    # should return Unknown
Traceback (most recent call last):
...
UnknownError: Unknown does not evaluate in boolean context
EXAMPLES:
sage: def func(n):
....:     if n > 0:
....:         return True
....:     elif n < 0:
....:         return False
....:     else:
....:         return Unknown
>>> from sage.all import *
>>> def func(n):
...     if n > Integer(0):
...         return True
...     elif n < Integer(0):
...         return False
...     else:
...         return Unknown
Using direct identification:
sage: for n in [-3, 0, 12]:
....:    res = func(n)
....:    if res is True:
....:        print("n={} is positive".format(n))
....:    elif res is False:
....:        print("n={} is negative".format(n))
....:    else:
....:        print("n={} is neither positive nor negative".format(n))
n=-3 is negative
n=0 is neither positive nor negative
n=12 is positive
>>> from sage.all import *
>>> for n in [-Integer(3), Integer(0), Integer(12)]:
...    res = func(n)
...    if res is True:
...        print("n={} is positive".format(n))
...    elif res is False:
...        print("n={} is negative".format(n))
...    else:
...        print("n={} is neither positive nor negative".format(n))
n=-3 is negative
n=0 is neither positive nor negative
n=12 is positive
Using UnknownError:
sage: for n in [-3, 0, 12]:
....:    try:
....:        if func(n):
....:            print("n={} is positive".format(n))
....:        else:
....:            print("n={} is negative".format(n))
....:    except UnknownError:
....:        print("n={} is neither positive nor negative".format(n))
n=-3 is negative
n=0 is neither positive nor negative
n=12 is positive
>>> from sage.all import *
>>> for n in [-Integer(3), Integer(0), Integer(12)]:
...    try:
...        if func(n):
...            print("n={} is positive".format(n))
...        else:
...            print("n={} is negative".format(n))
...    except UnknownError:
...        print("n={} is neither positive nor negative".format(n))
n=-3 is negative
n=0 is neither positive nor negative
n=12 is positive
AUTHORS:
- Florent Hivert (2010): initial version. 
- Ralf Stephan, Vincent Delecroix (2018-2020): redesign 
- class sage.misc.unknown.UnknownClass[source]¶
- Bases: - UniqueRepresentation- The Unknown truth value. - The - Unknownobject is used in Sage in several places as return value in addition to- Trueand- False, in order to signal uncertainty about or inability to compute the result.- Unknowncan be identified using- is, or by catching- UnknownErrorfrom a boolean operation.- Warning - Calling - bool()with- Unknownas argument will throw an- UnknownError. This also means that applying- and,- not, and- orto- Unknownmight fail.
- exception sage.misc.unknown.UnknownError[source]¶
- Bases: - TypeError- Raised whenever - Unknownis used in a boolean operation.- EXAMPLES: - sage: not Unknown Traceback (most recent call last): ... UnknownError: Unknown does not evaluate in boolean context - >>> from sage.all import * >>> not Unknown Traceback (most recent call last): ... UnknownError: Unknown does not evaluate in boolean context