# Metaoperators

Metaoperators allow AbstractLogic to the conditional truth of the superoperators and operator expressions below them. Common type of expressions to be evaluated in this way are if (===> or <===) and if and only if (<==>/====) statements. Generally metaoperators can be identified by noting that they have four symbols together making up the operator or are strings in UPPERCASE.

When AbstractLogic encounters a metaoperator it evaluates any expressions on either side of the metaoperator before attempting to evaluate the joint metaoperator. These expressions are returned as true or false. Then it follows the rules of the metaoperators to evaluate the joint expression.

In many cases using a metaoperator will return the exact same results as a superoperator, yet when hierarchical evaluation is required metaoperators provide a valuable tool.

A Simple example. (Activate the abstractlogic repl by typing = in console).

abstractlogic> a ∈ 1
a ∈ 1                    feasible outcomes 1 ✓✓          :1

abstractlogic> true &&& false |||| false ||| true
true &&& false |||| false ||| true       feasible outcomes 1 ✓✓          :1

AbstractLogic evaluated the command as follows (true & false) | (false | true) which became (false) | (true) which became true.

NoteMetaoperators are less visually appealing when compared with superoperators and should be refrained from in favor of superoperators when they are available.

## Operators

Notationally x, y, and z will refer to operations composed of at least one operator or superoperator.

#### x &&&& y

Both x and y must be true. Command end operator ; is often preferred to joint evaluators since it is more efficient. In x ; y efficiency is gained by evaluating x first, reducing the feasible set, then evaluating y. Notex AND y is an equivalent expression.

###### Example
abstractlogic> a,b,c ∈ 1:3
a,b,c ∈ 1:3              feasible outcomes 27 ✓          :1 1 3
abstractlogic> a > b &&&& b > c
a > b &&&& b > c                  feasible outcomes 1 ✓✓          :3 2 1

#### x |||| y

either x or y must be true. If both are false then total expression will return false. Notex OR y is equivalent

###### Example
abstractlogic> a,b,c ∈ 1:3
a,b,c ∈ 1:3              feasible outcomes 27 ✓          :1 1 3
abstractlogic> a > b |||| b > c
a > b |||| b > c                  feasible outcomes 17 ✓          :2 2 1

#### x !=== y

Either x or y must be true but not both. If both are false or both are true then it will return false. Notex XOR y and x ^^^^ y are equivalent (x and y can only be true or false)

###### Example
abstractlogic> a,b,c ∈ 1:3
a,b,c ∈ 1:3              feasible outcomes 27 ✓          :1 1 3
abstractlogic> a > b !=== b > c
a > b !=== b > c                  feasible outcomes 16 ✓          :3 3 2

#### x ==== y

If x = true then y = true or if x = false then y = false. Notex IFF y and x <==> y are equivalent

###### Example
abstractlogic> a,b,c ∈ 1:3
a,b,c ∈ 1:3              feasible outcomes 27 ✓          :1 1 3
abstractlogic> a > b ==== b > c
a > b ==== b > c                  feasible outcomes 11 ✓          :1 3 3

#### x ===> y

If x = true then y must be true. NoteIF x THEN y is equivalent

###### Example
abstractlogic> a,b,c ∈ 1:3
a,b,c ∈ 1:3              feasible outcomes 27 ✓          :1 1 3
abstractlogic> a > b ===> b > c
a > b ===> b > c                  feasible outcomes 19 ✓          :3 3 3

#### x !==> y

If x = false then y must be true.

###### Example
abstractlogic> a,b,c ∈ 1:3; a > b !==> b > c

a,b,c ∈ 1:3              Feasible Outcomes: 27   Perceived Outcomes: 27 ✓        :1 3 3
a > b !==> b > c         Feasible Outcomes: 17   Perceived Outcomes: 27 ✓        :1 3 2

#### x <=== y

If y = true then x must be true. Notex IF y is equivalent

###### Example
abstractlogic> a,b,c ∈ 1:3
a,b,c ∈ 1:3              feasible outcomes 27 ✓          :1 1 3
abstractlogic> a > b <=== b > c
a > b <=== b > c                  feasible outcomes 19 ✓          :3 1 1

### Chaining Operators

Metaoperators can be chained and when evaluated are evaluated from left to right.

Notetrue and false are replaced dynamically in AbstractLogic with 1==1 and 1==0.

Activate the abstractlogic repl by typing = in console.

abstractlogic> a,b ∈ 1,2
a,b ∈ 1,2                feasible outcomes 4 ✓           :2 1

abstractlogic> true
true                     feasible outcomes 4 ✓           :2 1

abstractlogic> false
false                    feasible outcomes 0 X            [empty set]

abstractlogic> back
Last command: "true" - Feasible Outcomes: 4     :1 1

abstractlogic> true |||| false &&&& true
true |||| false &&&& true        feasible outcomes 4 ✓           :1 1

abstractlogic> true !=== false
true !=== false                  feasible outcomes 4 ✓           :2 1

abstractlogic> true !=== false !=== true
true !=== false !=== true        feasible outcomes 0 X            [empty set]

NoteWildcards are spawned on the level below metaoperators. This allows multiple sets of wildcards to be evaluated separately.