# Rules

Rules are defined by operators, like `AND`, `OR`, `EQUALS`, etc. While it is easy to understand what these operators do in Boolean Logic, with Fuzzy Logic there are several ways of defining and implementing them, as the result of `IF the temperature IS hot AND the temperature IS comfortable` is neither true or false, but a veracity in the range [0, 1].

Wikipedia has a nice List of operators with representations of them to easily compare the algorithms.

## Implementation

With the veracity `x`, `y` and the weight `w` in the range `[0,1]` for fuzzy logic, and `x,y,w = 0` or `1` for boolean logic.

Name JavaScript, C… Boolean Python Boolean Fuzzy: Zadeh (linear) Fuzzy: Hyperbolic Parabloid Fuzzy: Yager-2
NOT(x) `!x` `not x` `1-x` `1-x` `1-x`
AND(x,y) `x && y` `x and y` `min(x,y)` `xy` `1- min( 1, sqrt( (1-x)² + (1-y)² ) )`
OR(x,y) `x || y` `x or y` `max(x,y)` `x+y - xy` `min( 1, (x² + y²)² )`
XOR(x,y) `x != y` `x is not y` `x + y - 2min(x,y)` `x+y - 2xy`
NXR(x,y) `x == y` `x is y` `1-x-y + 2*min(x,y)` `1-x-y + (2xy)`
IMPLIES(x,y) `!(x && !y)` `not (x and not y)` `1 - min(x, 1-y)` `1 - x + xy`
DOES_NOT_IMPLY(x,y) `x && !y` `x and not y` `min(x,1-y)` `x*(1-y)`
NAND(x,y) `!(x && y)` `not (x and y)` `1-min(x,y)` `1 - xy`
NOR(x,y) `!(x || y)` `not (x or y)` `1 - max(x,y)` `1-x-y + xy`
WEIGHTED(x,y,w `wx + (1-w)y` `wx + (1-w)y` `wx + (1-w)y`