
?Expr1 and ?Expr2

   Both Expr1 and Expr2 arithmetically evaluate to 1

Arguments
   Expr1               A boolean expression
   Expr2               A boolean expression

Type
   library(suspend)

Description
    Suspends until both Expr1 and Expr2 are ground, and then both arguments
    are evaluated. Succeeds if both evaluate to 1.

    Typically, the expressions contains reifiable constraints, in which case
    a corresponding reified constraint is set up, and the expression is
    replaced by the resulting boolean variable.


Modules
   This predicate is sensitive to its module context (tool predicate, see @/2).

Fail Conditions
   Expr1 or Expr2 do not both evaluate to 1

Exceptions
    24 --- Expr1 or Expr2 is not an arithmetic expression.

Examples
   
	?- B and 1, B = 1.
	B = 1
	Yes (0.00s cpu)

	?- B and 1, B = 0.
	No (0.00s cpu)

	% arguments are typically reifiable expressions:
	?- X > 5 and X < 7, X = 7.
	No (0.00s cpu)

	% the previous example is equivalent to:
	?- >(X,5,B1), <(X,7,B2), B1 and B2, X=7.
	No (0.00s cpu)

	% and/or/=>/neg are themselves reifiable:
	?- X > 5 and neg(X < 7), X = 7.
	X = 7
	Yes (0.00s cpu)
	

See Also
   and / 3, or / 2, => / 2, neg / 1, ic : and / 2
