# Not

`not` is a keyword unary operator that returns the logical negation of its operand. In its simplest usage, `not true` is equal to `false`, and `not false` is equal to `true`.

## Numeric Operands

In detail, for any numeric operand `x`, the result of `not x` depends on the absolute value of `x`. The full truth table for `not` with numeric operands is shown below.

Range of `abs(x)` `not x`
`abs(x) <= 0` `1`
`0 < abs(x) < 1` `1 - x`
`abs(x) >= 1` `0`

This is consistent with MiniScript’s support for fuzzy logic. If interpreted as probability, then if `p` is the probability of an event happening, `not p` is the probability of that event not happening.

## Non-Numeric Operands

When used with types other than numbers, `not` returns 1 (`true`) if the given value is “empty”, and 0 (`false`) if the operand is “not empty”, as shown below.

Type of `x` Characteristic of `x` `not x`
string empty, i.e. `x.len == 0` 1
string non-empty, i.e. `x.len > 0` 0
list empty, i.e. `x.len == 0` 1
list non-empty, i.e. `x.len > 0` 0
map empty, i.e. `x.len == 0` 1
map non-empty, i.e. `x.len > 0` 0
function any 0
null (N/A) 1