123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- """
- Module for mathematical equality [1] and inequalities [2].
- The purpose of this module is to provide the instances which represent the
- binary predicates in order to combine the relationals into logical inference
- system. Objects such as ``Q.eq``, ``Q.lt`` should remain internal to
- assumptions module, and user must use the classes such as :obj:`~.Eq()`,
- :obj:`~.Lt()` instead to construct the relational expressions.
- References
- ==========
- .. [1] https://en.wikipedia.org/wiki/Equality_(mathematics)
- .. [2] https://en.wikipedia.org/wiki/Inequality_(mathematics)
- """
- from sympy.assumptions import Q
- from sympy.core.relational import is_eq, is_neq, is_gt, is_ge, is_lt, is_le
- from .binrel import BinaryRelation
- __all__ = ['EqualityPredicate', 'UnequalityPredicate', 'StrictGreaterThanPredicate',
- 'GreaterThanPredicate', 'StrictLessThanPredicate', 'LessThanPredicate']
- class EqualityPredicate(BinaryRelation):
- """
- Binary predicate for $=$.
- The purpose of this class is to provide the instance which represent
- the equality predicate in order to allow the logical inference.
- This class must remain internal to assumptions module and user must
- use :obj:`~.Eq()` instead to construct the equality expression.
- Evaluating this predicate to ``True`` or ``False`` is done by
- :func:`~.core.relational.is_eq()`
- Examples
- ========
- >>> from sympy import ask, Q
- >>> Q.eq(0, 0)
- Q.eq(0, 0)
- >>> ask(_)
- True
- See Also
- ========
- sympy.core.relational.Eq
- """
- is_reflexive = True
- is_symmetric = True
- name = 'eq'
- handler = None # Do not allow dispatching by this predicate
- @property
- def negated(self):
- return Q.ne
- def eval(self, args, assumptions=True):
- if assumptions == True:
- # default assumptions for is_eq is None
- assumptions = None
- return is_eq(*args, assumptions)
- class UnequalityPredicate(BinaryRelation):
- r"""
- Binary predicate for $\neq$.
- The purpose of this class is to provide the instance which represent
- the inequation predicate in order to allow the logical inference.
- This class must remain internal to assumptions module and user must
- use :obj:`~.Ne()` instead to construct the inequation expression.
- Evaluating this predicate to ``True`` or ``False`` is done by
- :func:`~.core.relational.is_neq()`
- Examples
- ========
- >>> from sympy import ask, Q
- >>> Q.ne(0, 0)
- Q.ne(0, 0)
- >>> ask(_)
- False
- See Also
- ========
- sympy.core.relational.Ne
- """
- is_reflexive = False
- is_symmetric = True
- name = 'ne'
- handler = None
- @property
- def negated(self):
- return Q.eq
- def eval(self, args, assumptions=True):
- if assumptions == True:
- # default assumptions for is_neq is None
- assumptions = None
- return is_neq(*args, assumptions)
- class StrictGreaterThanPredicate(BinaryRelation):
- """
- Binary predicate for $>$.
- The purpose of this class is to provide the instance which represent
- the ">" predicate in order to allow the logical inference.
- This class must remain internal to assumptions module and user must
- use :obj:`~.Gt()` instead to construct the equality expression.
- Evaluating this predicate to ``True`` or ``False`` is done by
- :func:`~.core.relational.is_gt()`
- Examples
- ========
- >>> from sympy import ask, Q
- >>> Q.gt(0, 0)
- Q.gt(0, 0)
- >>> ask(_)
- False
- See Also
- ========
- sympy.core.relational.Gt
- """
- is_reflexive = False
- is_symmetric = False
- name = 'gt'
- handler = None
- @property
- def reversed(self):
- return Q.lt
- @property
- def negated(self):
- return Q.le
- def eval(self, args, assumptions=True):
- if assumptions == True:
- # default assumptions for is_gt is None
- assumptions = None
- return is_gt(*args, assumptions)
- class GreaterThanPredicate(BinaryRelation):
- """
- Binary predicate for $>=$.
- The purpose of this class is to provide the instance which represent
- the ">=" predicate in order to allow the logical inference.
- This class must remain internal to assumptions module and user must
- use :obj:`~.Ge()` instead to construct the equality expression.
- Evaluating this predicate to ``True`` or ``False`` is done by
- :func:`~.core.relational.is_ge()`
- Examples
- ========
- >>> from sympy import ask, Q
- >>> Q.ge(0, 0)
- Q.ge(0, 0)
- >>> ask(_)
- True
- See Also
- ========
- sympy.core.relational.Ge
- """
- is_reflexive = True
- is_symmetric = False
- name = 'ge'
- handler = None
- @property
- def reversed(self):
- return Q.le
- @property
- def negated(self):
- return Q.lt
- def eval(self, args, assumptions=True):
- if assumptions == True:
- # default assumptions for is_ge is None
- assumptions = None
- return is_ge(*args, assumptions)
- class StrictLessThanPredicate(BinaryRelation):
- """
- Binary predicate for $<$.
- The purpose of this class is to provide the instance which represent
- the "<" predicate in order to allow the logical inference.
- This class must remain internal to assumptions module and user must
- use :obj:`~.Lt()` instead to construct the equality expression.
- Evaluating this predicate to ``True`` or ``False`` is done by
- :func:`~.core.relational.is_lt()`
- Examples
- ========
- >>> from sympy import ask, Q
- >>> Q.lt(0, 0)
- Q.lt(0, 0)
- >>> ask(_)
- False
- See Also
- ========
- sympy.core.relational.Lt
- """
- is_reflexive = False
- is_symmetric = False
- name = 'lt'
- handler = None
- @property
- def reversed(self):
- return Q.gt
- @property
- def negated(self):
- return Q.ge
- def eval(self, args, assumptions=True):
- if assumptions == True:
- # default assumptions for is_lt is None
- assumptions = None
- return is_lt(*args, assumptions)
- class LessThanPredicate(BinaryRelation):
- """
- Binary predicate for $<=$.
- The purpose of this class is to provide the instance which represent
- the "<=" predicate in order to allow the logical inference.
- This class must remain internal to assumptions module and user must
- use :obj:`~.Le()` instead to construct the equality expression.
- Evaluating this predicate to ``True`` or ``False`` is done by
- :func:`~.core.relational.is_le()`
- Examples
- ========
- >>> from sympy import ask, Q
- >>> Q.le(0, 0)
- Q.le(0, 0)
- >>> ask(_)
- True
- See Also
- ========
- sympy.core.relational.Le
- """
- is_reflexive = True
- is_symmetric = False
- name = 'le'
- handler = None
- @property
- def reversed(self):
- return Q.ge
- @property
- def negated(self):
- return Q.gt
- def eval(self, args, assumptions=True):
- if assumptions == True:
- # default assumptions for is_le is None
- assumptions = None
- return is_le(*args, assumptions)
|