88 lines
1.4 KiB
Plaintext
88 lines
1.4 KiB
Plaintext
### Booleans
|
|
|
|
[
|
|
Datatype booleans Alias bools
|
|
Funcon true
|
|
Funcon false
|
|
Funcon not
|
|
Funcon implies
|
|
Funcon and
|
|
Funcon or
|
|
Funcon exclusive-or Alias xor
|
|
]
|
|
|
|
|
|
Datatype
|
|
booleans ::= true | false
|
|
Alias
|
|
bools = booleans
|
|
|
|
|
|
Funcon
|
|
not(_:booleans) : =>booleans
|
|
/*
|
|
`not(B)` is logical negation.
|
|
*/
|
|
Rule
|
|
not(false) ~> true
|
|
Rule
|
|
not(true) ~> false
|
|
|
|
|
|
Funcon
|
|
implies(_:booleans, _:booleans) : =>booleans
|
|
/*
|
|
`implies(B1, B2)` is logical implication.
|
|
*/
|
|
Rule
|
|
implies(false, false) ~> true
|
|
Rule
|
|
implies(false, true) ~> true
|
|
Rule
|
|
implies(true, true) ~> true
|
|
Rule
|
|
implies(true, false) ~> false
|
|
|
|
|
|
Funcon
|
|
and(_:booleans*) : =>booleans
|
|
/*
|
|
`and(B, ...)` is logical conjunction of any number of Boolean values.
|
|
*/
|
|
Rule
|
|
and( ) ~> true
|
|
Rule
|
|
and(false, _*:booleans*) ~> false
|
|
Rule
|
|
and(true, B*:booleans*) ~> and(B*)
|
|
|
|
|
|
Funcon
|
|
or(_:booleans*) : =>booleans
|
|
/*
|
|
`or(B, ...)` is logical disjunction of any number of Boolean values.
|
|
*/
|
|
Rule
|
|
or( ) ~> false
|
|
Rule
|
|
or(true, _*:booleans*) ~> true
|
|
Rule
|
|
or(false, B*:booleans*) ~> or(B*)
|
|
|
|
|
|
Funcon
|
|
exclusive-or(_:booleans, _:booleans) : =>booleans
|
|
Alias
|
|
xor = exclusive-or
|
|
/*
|
|
`exclusive-or(B1, B2)` is exclusive disjunction.
|
|
*/
|
|
Rule
|
|
exclusive-or(false, false) ~> false
|
|
Rule
|
|
exclusive-or(false, true) ~> true
|
|
Rule
|
|
exclusive-or(true, false) ~> true
|
|
Rule
|
|
exclusive-or(true, true) ~> false
|