View Source Bond.Predicates (Bond v0.1.0)

Predicate functions and operators that are useful in contract specifications.

To use the operator versions of the predicates, this module must be imported in the using module.

Summary

Functions

Logical implication: does p imply q?

Logical exclusive or: is either p or q true, but not both?

Logical exclusive or operator: p ||| q means xor(p, q).

Logical implication operator: p ~> q means implies?(p, q).

Functions

@spec implies?(boolean(), boolean()) :: boolean()

Logical implication: does p imply q?

Examples

iex> implies?(true, true)
true
iex> implies?(true, false)
false
iex> implies?(false, true)
true
iex> implies?(false, false)
true
@spec xor(boolean(), boolean()) :: boolean()

Logical exclusive or: is either p or q true, but not both?

Examples

iex> xor(true, true)
false
iex> xor(true, false)
true
iex> xor(false, true)
true
iex> xor(false, false)
false

Logical exclusive or operator: p ||| q means xor(p, q).

Note that the ||| operator has higher precedence than many other operators and it may be necessary to parenthesize the expressions on either side of the operator to get the expected result.

Examples

iex> true ||| true
false
iex> true ||| false
true
iex> false ||| true
true
iex> false ||| false
false
iex> x = 2
2
iex> y = 4
4
iex> (x - y < 0) ||| (y <= x)
true

Logical implication operator: p ~> q means implies?(p, q).

Note that the ~> operator has higher precedence than many other operators and it may be necessary to parenthesize the expressions on either side of the operator to get the expected result.

Examples

iex> true ~> true
true
iex> true ~> false
false
iex> false ~> true
true
iex> false ~> false
true
iex> x = 2
2
iex> y = 4
4
iex> (x - y < 0) ~> (y > x)
true