# Logic¶

## Booleans¶

The type of booleans, written Bool or Boolean, represents logical truth and falsehood. The two values of this type are written true and false. (For convenience True and False also work.)

• Logical AND can be written and, &&, or ∧ (note that ∧ is U+2227 LOGICAL AND, not a caret symbol ^, which is reserved for exponentiation).
• Logical OR is written or, ||, or ∨ (U+2228 LOGICAL OR).
• Logical negation (NOT) is written not or ¬ (U+00AC NOT SIGN).
• Logical implication is written implies or ==>.
Disco> true and false
false
Disco> true || false
true
Disco> not (true ∧ true)
false
Disco> ¬ (false or false or false or true)
false
Disco> true implies false
false
Disco> false implies true
true


## Equality testing¶

If you have two disco values of the same type, in almost all cases you can compare them to see whether they are equal using ==, resulting in a Bool value.

Disco> 2 == 5
false
Disco> 3 * 7 == 2*10 + 1
true
Disco> (3/5)^2 + (4/5)^2 == 1
true
Disco> false == False
true


The /= operator tests whether two values are not equal; it is just the logical negation of ==.

## Comparison¶

Again, in almost all cases values can be compared to see which is less or greater, using operators <, <=, >, or >=.

Disco> 2 < 5
true
Disco> false < true
true


Comparisons can also be chained; the result is obtained by comparing each pair of values according to the comparison between them, and taking the logical AND of all the results. For example:

Disco> 1 < 3 < 8 < 99
true
Disco> 2.2 < 5.9 > 3.7 < 8.8 > 1.0 < 9
true
Disco> x : Int
Disco> x = 5
Disco> 2 < x < 10
true